网站开发推广渠道,关于网站开发书籍,网站快照前显示中文怎么做的,莱芜找工作网站片头
嗨~小伙伴们#xff0c;大家好#xff01;今天我们来学习C蓝桥杯基础篇#xff08;四#xff09;#xff0c;继续练习相关习题。准备好了吗#xff1f;咱们开始咯~ 题目1 连续整数相加 思路分析#xff1a; 这道题#xff0c;我们可以把从键盘中读取n写在while循…片头
嗨~小伙伴们大家好今天我们来学习C蓝桥杯基础篇四继续练习相关习题。准备好了吗咱们开始咯~ 题目1 连续整数相加 思路分析 这道题我们可以把从键盘中读取n写在while循环条件里面while(cin n)题目中明确指出如果读入的n为0或者负数则继续读取数字直至读入n值为正整数为止。因此只要 n0我们就不停的读取n不作任何处理。 while循环条件应为while(cin n,n0); 只要 n0立马跳出循环作后续判断。 代码如下
//连续整数相加
//读入2个整数值a和n,计算从a开始的n个连续整数的和
//注意,如果读入的n为0或为负数,则继续读取数字直至读入n值为正整数为止
//输入共一行,包含整数a和若干个整数n
//输出一个整数,表示从a开始的n个连续整数的和int main() {int a;cin a;int n;while (cin n , n 0); //此处执行语句为空语句int sum a;for (int i 1; i n; i) {sum a i;}cout 从 a 开始的 n 个连续整数的和为: sum endl;return 0;
} 题目2 约数 代码如下
//约数
//输入1个整数n,按照从小到大的顺序输出它的全部约数、
//输入一个整数n
//输出全部约数,每个约数占1行int main() {int n;cin n;for (int i 1; i n; i) {if (n % i 0) //如果 n % i 0,说明n可以被i整除cout i endl;}return 0;
} 题目3 PUM 思路分析 题目要求说构造一个n行m列的矩阵我们可以使用循环嵌套 ①外层的for循环控制行数里面的for循环控制列数。 ②定义变量k表示矩阵中的数字。 ③规定将每行的最后一个数字变为PUM则里面的for循环的取值范围 0~m-2从第0列~第m-2列数字k都可在矩阵中出现。 ④第m-1列打印PUM打印完毕后k自动加1。每打印完一行执行换行操作。 代码如下
//PUM
//输入2个整数n和m,构造一个n行m列的数字矩阵
//矩阵中的数字从第一行到最后一行
//按从左到右的顺序依次为 1,2,3,4,...,n*m
//矩阵构造完成后,将每行的最后一个数字变为PUM
//输出最终矩阵int main3() {int n, m;cin n m;for (int i 0, k 1; i n; i) //打印n行,i的取值范围 0~n-1{for (int j 0; j m-1; j, k) //打印m-1行,j的取值范围 0~m-2{cout k ;}cout PUM endl; //最后一列打印PUMk; //打印完毕后,k自动加1}return 0;
} 题目4 余数 代码如下
//余数
//输入一个整数n
//请按顺序输出1~10000之间不包括1~10000)的所有除以n余2的数字
//输入1个整数n
//输出所有满足条件的数字,从小到大每行输出1个int main() {int n;cin n;for (int i 2; i 10000; i) {if (i % n 2) {cout i endl;}}return 0;
} 题目5 六个奇数 题目说读取一个整数x输出x之后的6个奇数。如果该x为偶数那么输出6个奇数如果该x为奇数那么它也算作6个奇数之一后面只用输出5个奇数。咱们可以先判断x是否为奇数如果不是奇数将x加1变成奇数即可。接着只需要用for循环输出6个奇数。
代码如下
//6个奇数
//读取1个整数x,输出x之后的6个奇数
//如果x也是奇数,那么它也算作6个奇数之一
//输入1个整数x
//输出满足条件的奇数,每个占一行int main() {int x;cin x;cout endl;if (x % 2 0) x x 1; //如果输入的x本身就是奇数,则不需要执行if条件里面的语句int ret;for (int i 0; i 6; i) {ret x 2 * i;cout ret endl;}return 0;
} 题目6 乘法表 代码如下
//乘法表
//输入一个整数n,输出n的乘法表,如下:
// 1 × n n
// 2 × n 2n
// 3 × n 3n
// 4 × n 4n
// 5 × n 5n
// ...
// 10 × n 10n
//输入一个整数n
//输出n的乘法表int main() {int n;cin n;for (int i 1; i 10; i) {printf(%d × %d %d\n, i, n, i * n);cout endl;}return 0;
} 题目7 实验 分析思路 ①我们可以定义3个int型变量C表示兔子的数量R表示老鼠的数量F表示青蛙的数量初始化均为0。 ②如果读取的字符T为C那么兔子的数量为 C A如果读取的字符T为R那么老鼠的数量为 R A如果读取的字符T为F那么兔子的数量为 F A ③动物总数为 CRF求每种动物所占百分比用 最后乘以100%保留2位小数。 代码如下
//实验
//医学部一共进行了n场动物实验。
//共有3种小动物可用来实验,分别是青蛙、老鼠和兔子。
//每次实验都会选取其中1种动物来参与实验,选取数量若干。
//请你统计一下医学部一共用了多少小动物
//每种分别用了多少,每种动物使用数量占总量的百分比是多少
//输入第一行包含整数n,表示实验次数
//接下来n行,每行包含一个整数a(表示一次实验使用的小动物的数量)
//和一个字符T(表示一次实验使用的小动物的类型)
//c表示兔子,r表示老鼠,f表示青蛙
//输出所用动物总数,每种动物的数量,以及每种动物所占百分比
//输出百分比时,保留2位小数int main() {int n;cin n; //实验次数int C 0; //兔子int R 0; //老鼠int F 0; //青蛙int a; //表示一次实验使用的小动物的数量char t; //表示一次实验使用的小动物的类型while (n--) {cin a t;if (t c) C a;else if (t r) R a;else F a;}printf(所用动物总数: %d\n, C R F);printf(兔子的数量为: %d\n, C);printf(老鼠的数量为: %d\n, R);printf(青蛙的数量为: %d\n, F);printf(兔子所占的百分比为: %.2lf %%\n, (1.0 * C) / (C R F) * 100);printf(老鼠所占的百分比为: %.2lf %%\n, (1.0 * R) / (C R F) * 100);printf(青蛙所占的百分比为: %.2lf %%\n, (1.0 * F) / (C R F) * 100);return 0;
} 题目8 区间2 代码如下
//区间2
//读取n个整数x1,x2,x3,...,xn,
//判断这n个整数中有多少个在[10,20]的范围内,有多少个在范围外
//输入第一行包含整数n,表示共有n个整数需要进行判断
//接下来n行,每行包含一个整数xi
//第一行输出x in,其中x为在范围内的整数的数量
//第二行输出y out,其中y为在范围外的整数的数量int main() {int n;cin n;int k;int x 0;int y 0;while (n--) {cin k;if (k 10 k 20) x; //在范围内的整数的数量else y; //在范围外的整数的数量}cout x in endl;cout y out endl;return 0;
} 题目9 连续奇数的和2 注意如果输入的xy咱们需要调用swap函数进行交换保证xy。
代码如下
//连续奇数的和2
//输入n对整数对x,y
//对于每对x,y,请你求出它们之间(不包括x和y)的所有奇数的和
//第一行输入整数n,表示共有n对测试数据
//接下来n行,每行输入一组整数x和y
//每对x,y输出一个占一行的奇数和int main() {int n;cin n;int x, y;int sum 0;while (n--) {cin x y;if (x y) swap(x, y);for (int i x 1; i y; i) {if (i % 2 1) {sum i;}}cout sum endl;}return 0;
} 题目10 简单斐波那契 在之前的篇章中我们讲过如何求斐波那契数列的第n项。这里我们需要输出这个序列的前n项。
abf(1)0f(2)1f(2)1f(3)1f(3)1f(4)2f(4)2f(5)3f(5)3f(6)5f(6)5f(7)8f(7)8f(8)13f(8)13f(9)21f(9)21f(10)34... ... f(n-2)f(n-1)f(n-1)f(n)f(n)f(n1) 我们要输出数列的前n项那么只需要将数列打印出来即可。观察表格a列就是我们需要打印的。 代码如下
//简单斐波那契
//以下数列 0 1 1 2 3 5 8 13 21 ...被称为斐波那契数列
//这个数列从第3项开始,每一项都等于前2项之和
//输入一个整数n,请你输出这个数列的前n项
//输入一个整数n
//在一行中输出斐波那契数列的前n项,数字之间用空格隔开// a b
// 0 1 f(1) f(2)
// 1 1 f(2) f(3)
// 1 2 f(3) f(4)
// 2 3 f(4) f(5)
// 3 4 f(5) f(6)
// 4 7 f(6) f(7)
//....
// f(n-3) f(n-2)
// f(n-2) f(n-1)
// f(n-1) f(n)
// f(n) f(n1)int main() {int a 0; //第1项int b 1; //第2项int n;cin n; //第n项for (int i 1; i n; i) {cout a ;int c a b;a b;b c;}cout endl;return 0;
} 题目11 数字序列和它的和 解题思路 ①这道题我们可以把输入整数对m,n放在while循环条件里面并且保证m0 n0。当 m0或者n0时不进入循环。while循环条件为while(cinmn, m 0 n 0)。 ②如果mn调用swap函数交换值。使得m为最小值,n为最大值。用for循环输出从最小值到最大值的数字序列以及数字序列各数字之和。 代码如下
//数字序列和它的和
//输入若干个整数对m,n
//对于每个整数对
//输出以这2个数为最大值和最小值的公差为1的等差数列
//注意,当输入整数对中
//任意一个数为0或负整数时,立即停止输入,且该组数对无需作任何处理
//输入共若干行,每行包含2个整数
//最后一行的2个整数中,至少有一个是非正整数
//对于每组需作处理的数对,输出一个结果,每个结果占一行
//结果包含从最小值到最大值的数字序列以及数字序列各数字之和int main() {int m, n;int sum 0;while (cin m n , m 0 n 0) {if (m n) swap(n, m);for (int i m; i n; i) {cout i ;sum i;}cout Sum sum endl;sum 0;//每次计算完,sum必须归零cout endl;}return 0;
} 题目12 完全数 这道题最简单的做法先求这个数的所有约数用1~x-1来循环判断是否能被x整除用一个变量sum来存储所有约数的和如何sum和这个数本身相同那么这个数则是完全数否则不是完全数。
代码如下
//完全数
//一个整数,除了本身以外的其他所有约数的和如果等于该数
//那么我们就称这个整数为完全数
//例如,6就是一个完全数
//因为它除了本身以外的其他约数的和为 123 6
//现在,给定你n个整数,请你依次判断这些数是否为完全数
//输入第一行包含整数n,表示共有n个测试用例
//接下来n行,每行包含一个需要你进行判断的整数x
//每个测试用例输出1个结果,每个结果占一行
//如果测试数据是完全数,则输出X is perfect,其中x是测试数据
//如果测试数据不是完全数,则输出X is not perfect,其中x是测试数据//基础版
int main() {int n;cin n; //共有n个测试用例cout endl;int x;while (n--) {cin x;int sum 0; //每次计算完,sum必须归零for (int i 1; i x; i) {if (x % i 0) { //求x的所有约数sum i;}}if (sum x) cout x is perfect endl;else cout x is not perfect endl;}return 0;
}
但是如果每次输入的x都很大那么循环判断1~x-1就会非常浪费时间占用空间。有没有更好一点的方法呢
有打个比方12的约数有12634。约数都是成对出现的。
2是12的约数那必然 12/2 6也是12的约数3是12的约数12/3 4也是12的约数。所以我们在枚举约数的时候枚举较小的约数即可。
d是x的约数也是x的约数。满足 d 。 xd 。
因此我们只需要循环条件为 i*ix 先求出较小的约数再用 x/i 求出另外一个较大的约数即可。不必再用 i x-1 了。
举个例子x为36i*ixi 的可取值为12346较小的约数。那么相对应的 x/i 为 36181296较大的约数。但是约数不能自身因此我们需要去除36对应的条件为 x/i x并且2个约数不能相同6只能出现1次对应的条件为: i ! x/i ;
代码如下
//优化版
int main() {int n;cin n; //共有n个测试用例cout endl;int x;while (n--) {cin x;int sum 0;//每次计算完,sum必须归零for (int i 1; i*i x; i) { //只需要判断i*i是否小于等于x即可先求出较小的约数if (x % i 0) {if (i x) sum i; //如果此时的i小于x,保存到sum里面if (x / i ! i x / i x) sum x / i;//如果满足2个约数不同,并且较大的约数也小于自身x,那么保存到sum里面}}if (sum x) cout x is perfect endl;else cout x is not perfect endl;}return 0;
} 题目13 质数 质数只能被1和自身整除的数。在之前的练习中已经做过我们不再阐述。
代码如下
//质数
//一个大于1的自然数,如果除了1和它自身外,不能被其他自然数整除
//7就是质数,因为它只能被1和7整除
//给定你n个大于1的自然数,判断这些数是否为质数
//输入第一行包含整数n,表示共有n个测试数据
//接下来的n行,每行包含1个自然数x
//每个测试用例输出1个结果,每个结果占1行
//如果测试数据是质数,则输出X is prime,x为测试数据
//如果测试数据不是质数,则输出X is not prime,x为测试数据int main() {int n;cin n;int x;while (n--) {cin x;bool flag true; //假设为质数for (int i 2; i * i x; i) {if (x % i 0) { //如果x能被i整除,说明x不是质数flag false; //flag标记为falsebreak;}}if (flag) cout x is prime endl;else cout x is not prime endl;}return 0;
} 题目14 打印菱形 运用曼哈顿距离|x1-cx||y1-cy|n/2在上一篇中我们已经详细阐述了这里不再赘述。
代码如下
//打印菱形
int main14() {int n;cin n;//中心点的坐标(n/2,n/2)int cx n / 2;int cy n / 2;//先打印n行n列的矩阵for (int i 0; i n; i) {for (int j 0; j n; j) {if (abs(i - cx) abs(j - cy) n / 2) { //如果点和中心原点的距离n/2,打印*printf(*);}else { //如果点和中心原点的距离n/2,打印 printf( );}}cout endl; //打印完1行,换行}return 0;
} 片尾
今天我们练习了循环相关的习题希望对友友们有所帮助
求点赞收藏加关注
谢谢大家