#include<stdio.h>intmain(){int n;scanf("%d",&n);//从标准输入读取nint sum =0, v;//v:某一阶乘项的值for(int i =1; i <= n;++i)//遍历1到n{
v =1;//初始化v为1for(int j =1; j <= i;++j)//计算i的阶乘
v *= j;
sum += v;//将i的阶乘加到sum}printf("%d", sum);//输出阶乘的和return0;}
2027:【例4.13】三角形
#include<stdio.h>intmain(){int n;scanf("%d",&n);//从标准输入读取nfor(int i =1; i <= n;++i)//遍历1到n{for(int j =1; j <= i;++j)//在每一行输出i个'*'printf("*");printf("\n");//每一行结束后换行}return0;}
2028:【例4.14】百钱买百鸡
#include<stdio.h>intmain(){int a, b, c;//分别代表公鸡、母鸡和小鸡的数量for(a =0; a <=20;++a)//公鸡最多不超过20只for(b =0; b <=33;++b)//母鸡最多不超过33只for(c =0; c <=100;++c)//小鸡最多不超过100只{if(a+b+c ==100&& c%3==0&&5*a+3*b+c/3==100)//满足总数量为100,小鸡数量是3的倍数,以及总钱数为100的条件printf("%d %d %d\n", a, b, c);//输出符合条件的公鸡、母鸡和小鸡的数量}return0;}
2029:【例4.15】水仙花数
#include<stdio.h>intmain(){int a, b, c;//分别代表百位、十位和个位for(int i =100; i <=999;++i)//遍历所有三位数{
a = i/100;//计算百位数
b = i/10%10;//计算十位数
c = i%10;//计算个位数if(a*a*a+b*b*b+c*c*c == i)//如果这个数是水仙花数printf("%d\n", i);//输出这个数}return0;}
2030:【例4.16】找素数
#include<stdio.h>#include<math.h>//为了使用sqrt函数intmain(){int a, b;//输入的范围[a, b]
bool isPrime;//判断一个数是否为素数的标志scanf("%d %d",&a,&b);//从标准输入读取范围[a, b]for(int i = a; i <= b;++i)//遍历范围[a, b]内的所有数{
isPrime = true;//假设i是素数for(int j =2; j <=sqrt(i);++j)//检查i是否有2到sqrt(i)的因数{if(i % j ==0)//如果i能被j整除,说明i不是素数{
isPrime = false;//将isPrime设置为falsebreak;//结束内层循环}}if(isPrime)//如果i是素数printf("%d\n", i);//输出i}return0;}
2031:【例4.17】四位完全平方数
#include<stdio.h>#include<math.h>// 为了使用sqrt函数intmain(){int d, num;// d用来保存开方后的整数,num用来保存生成的四位数for(int i =1; i <=9;++i)// 遍历所有可能的千位和百位数字for(int j =0; j <=9;++j)// 遍历所有可能的十位和个位数字{
num = i*1000+i*100+j*10+j;// 生成满足条件的四位数
d =sqrt(num);// 计算这个四位数的平方根,结果向下取整if(num == d*d)// 如果这个四位数是某个整数的平方printf("%d\n", num);// 输出这个四位数}return0;}
2032:【例4.18】分解质因数
#include<stdio.h>intmain(){int n, i =2;scanf("%d",&n);// 从标准输入读取一个正整数nprintf("%d=", n);// 输出n=int isFirst =1;// 用于标记是否为第一个输出的质因数while(n >1){if(n % i ==0)// 如果n能被i整除,那么i就是n的一个质因数{if(isFirst)// 如果是第一个输出的质因数
isFirst =0;// 将isFirst设置为0,表示后面的质因数不再是第一个else// 如果不是第一个输出的质因数,那么在质因数前面输出一个*printf("*");printf("%d", i);// 输出质因数i
n /= i;// 用n除以i,得到剩余需要进行质因数分解的部分}else
i++;// 如果n不能被i整除,那么将i加1,尝试下一个可能的质因数}return0;}
2033:【例4.19】阶乘之和
#include<stdio.h>#defineM1000000// 设置一个常数Mintmain(){int n, num =1, sum =0;// num用于计算阶乘,sum用于存储阶乘和scanf("%d",&n);// 从标准输入读取一个正整数nfor(int i =1; i <= n;++i)// 从1到n逐个计算阶乘并加到sum中{
num = num * i % M;// 计算i的阶乘并取模M,避免溢出
sum =(sum + num)% M;// 将num加到sum中并取模M,避免溢出}printf("%d", sum);// 输出阶乘和模M的结果return0;}
1091:求阶乘的和
#include<stdio.h>intmain(){int n;scanf("%d",&n);// 从标准输入读取一个正整数nint sum =0, v;// sum用于存储阶乘和,v用于计算每个阶乘项的值for(int i =1; i <= n;++i)// 从1到n逐个计算阶乘并加到sum中{
v =1;// 初始化v为1for(int j =1; j <= i;++j)// 计算i的阶乘
v *= j;
sum += v;// 将v加到sum中}printf("%d", sum);// 输出阶乘和return0;}
1092:求出e的值
#include<stdio.h>intmain(){int n;scanf("%d",&n);// 从标准输入读取一个正整数ndouble sum =1, v;// sum用于存储倒阶乘和,v用于计算每个倒阶乘项的值for(int i =1; i <= n;++i)// 从1到n逐个计算倒阶乘并加到sum中{
v =1;// 初始化v为1for(int j =1; j <= i;++j)// 计算1 / i!
v *=1.0/ j;
sum += v;// 将v加到sum中}printf("%.10lf", sum);// 输出倒阶乘和,保留10位小数return0;}
1093:计算多项式的值
#include<stdio.h>#include<math.h>intmain(){double x, n, s =1;// x是实数,n是正整数,s用于存储幂的和scanf("%lf%lf",&x,&n);// 从标准输入读取x和nfor(int i =1; i <= n;++i)// 计算x的1到n次幂,并加到s中
s +=pow(x, i);printf("%.2lf", s);// 输出幂的和,保留2位小数return0;}
1094:与7无关的数
#include<stdio.h>#include<stdbool.h>
bool isRel7(int n)// 判断数n是否与7相关{if(n %7==0)// 如果n是7的整数倍,则相关return true;for(int a = n; a >0; a /=10)// 分离数字n的各位{int d = a %10;if(d ==7)// 如果有一位是7return true;}return false;}intmain(){int n, s =0;scanf("%d",&n);// 从标准输入读取一个正整数nfor(int i =1; i <= n;++i)// 从1到n逐个检查每个数{if(isRel7(i)== false)// 如果i与7无关
s += i * i;// 将i的平方加入和s中}printf("%d", s);// 输出平方和return0;}
1095:数1的个数
#include<stdio.h>intcount1(int n)// 计算数字n中1的个数{int ct =0;// 计数器for(int a = n; a >0; a /=10)// 遍历数字n的每一位{if(a %10==1)// 如果当前位是1
ct++;// 计数器加1}return ct;// 返回1的个数}intmain(){int n, ct =0;// ct: 计数器scanf("%d",&n);// 从标准输入读取一个正整数nfor(int i =1; i <= n;++i)// 统计1到n中1的个数
ct +=count1(i);printf("%d\n", ct);// 输出1的总个数return0;}
1096:数字统计
#include<stdio.h>intcount2(int n)// 计算数字n中2的个数{int ct =0;// 计数器for(int a = n; a >0; a /=10)// 遍历数字n的每一位{if(a %10==2)// 如果当前位是2
ct++;// 计数器加1}return ct;// 返回2的个数}intmain(){int l, r, ct =0;// ct: 计数器scanf("%d %d",&l,&r);// 从标准输入读取两个正整数l和rfor(int i = l; i <= r;++i)// 统计l到r中2的个数
ct +=count2(i);printf("%d\n", ct);// 输出2的总个数return0;}
1097:画矩形
#include<stdio.h>intmain(){int h, w, x;// h: 高度, w: 宽度, x: 0表示空心, 1表示实心char c;// 构成矩形的字符scanf("%d %d %c %d",&h,&w,&c,&x);// 从标准输入读取高度, 宽度, 字符和标志变量char c_in = x ==1? c :' ';// 如果标志变量为1, 则内部字符为c, 否则为空格for(int i =0; i < w;++i)// 打印第一行putchar(c);putchar('\n');for(int i =0; i < h -2;++i)// 打印中间的行{putchar(c);// 打印每行的第一个字符for(int j =0; j < w -2;++j)// 打印每行的内部字符putchar(c_in);printf("%c\n", c);// 打印每行的最后一个字符}for(int i =0; i < w;++i)// 打印最后一行putchar(c);putchar('\n');return0;}
1098:质因数分解
#include<stdio.h>#include<math.h>intmain(){int n;// 输入的数scanf("%d",&n);// 从标准输入读取一个数for(int i =2; i <=sqrt(n);++i)// 从2开始到这个数的平方根查找因数{if(n % i ==0)// 如果这个数能被i整除,那么i就是这个数的一个因数{printf("%d\n", n / i);// 输出这个数除以i的结果,这就是这个数的最大质因数return0;}}return0;}
1099:第n小的质数
#include<stdio.h>#include<math.h>#include<stdbool.h>// 判断a是否是质数,已知a >= 2
bool isPrime(int a){for(int i =2; i <=sqrt(a); i++){if(a % i ==0)return false;}return true;}intmain(){int n, ct =0;// n: 输入的数, ct: 计数器scanf("%d",&n);// 从标准输入读取一个数for(int i =2;;++i)// 从2开始{if(isPrime(i))// 判断i是否是质数{
ct++;// 如果是质数,计数器加1if(ct >= n)// 如果已经找到第n小的质数{printf("%d\n", i);// 输出这个质数return0;}}}}
1100:金币
#include<stdio.h>intmain(){int n;scanf("%d",&n);// 读取输入的天数int sum =0, d =1, j =1;// sum: 总金币数, d: 当前阶段, j: 当前阶段的第几天for(int i =1; i <= n;++i)// i: 从开始算起的第几天{
sum += d;// 当前处于阶段d,第i天获得d个金币if(j >= d)// 若在当前阶段已经过了d天{
d++;// 阶段数增加1
j =1;// 下一天是新的阶段的第一天}else
j++;// 处于本阶段的天数增加}printf("%d\n", sum);// 输出总金币数return0;}
1101:不定方程求解
#include<stdio.h>intmain(){int a, b, c, ct =0;// ct: 计数器,用于记录解的个数scanf("%d %d %d",&a,&b,&c);// 从标准输入读取a, b, c的值for(int x =0; x <= c;++x)// 遍历x的所有可能值for(int y =0; y <= c;++y)// 对于每个x,遍历y的所有可能值{if(a*x + b*y == c)// 如果找到一组解
ct++;// 计数器加1}printf("%d\n", ct);// 输出解的个数return0;}