返回:贺老师课程教学链接 项目要求
【项目2 - n=a!+b!+c!】
求满足条件n=a!+b!+c!的所有三位数n并输出,其中a,b,c分别为n的百、十、个位数。
[参考解答]
解法1:n为3位数,n由100循环到999,每次循环,分离出百、十、个位数,以此判断
复制代码
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34#include <stdio.h> int main() { int n,a,b,c,sum; int i,f; n=100; while(n<1000) { c=n%10; //个位数, b=(n/10)%10; //十位数 a=n/100; //百位数 sum=0; //注意:每次循环都要初始化 for(f=1,i=1;i<=a;++i) f=f*i; //求 a! sum += f; for(f=1,i=1;i<=b;++i) f=f*i; //求 b! sum += f; for(f=1,i=1;i<=c;++i) f=f*i; //求 c! sum += f; //此时sum的值为a!+b!+c! if(sum==n) //若条件成立,则 n 就是要找的数。 printf("%d ", n); ++n; //考察下一个n } printf("n"); return 0; }
解法2:用a、b、c分别代表百、十、个位数,以此构造出n=100*a+b*10+c,按a、b、c组织循环
复制代码
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30#include <stdio.h> int main() { int a,b,c; //分别代表百、十、个位数 int n, sum, f, i; for(a=1; a<10; a++) { for(b=0; b<10; b++) for(c=0; c<10; c++) { n=a*100+b*10+c; sum=0; //注意:每次循环都要初始化 for(f=1,i=1; i<=a; ++i) f=f*i; //求 a! sum += f; for(f=1,i=1; i<=b; ++i) f=f*i; //求 b! sum += f; for(f=1,i=1; i<=c; ++i) f=f*i; //求 c! sum += f; //此时sum的值为a!+b!+c! if(sum==n) //若条件成立,则 n 就是要找的数。 printf("%d ", n); } } printf("n"); return 0; }
解法3:按解法2的思路做,减少了求阶乘的次数
复制代码
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27#include <stdio.h> int main() { int a,b,c; //分别代表百、十、个位数 int fa, fb, fc; //分别代表a、b、c的阶乘 int n, sum; for(fa=1, a=1; a<10; a++) { fa*=a; for(fb=1, b=0; b<10; b++) { if(b>0) fb*=b; //b为0时,fb就为1(0的阶乘为1),再乘0倒危险了 for(fc=1, c=0; c<10; c++) { if(c>0) fc*=c; n=a*100+b*10+c; sum=fa+fb+fc; if(sum==n) //若条件成立,则 n 就是要找的数。 printf("%d ", n); } } } printf("n"); return 0; }
解法n:在这个程序中,求阶乘是个耗时的事,还可以想出更多优化的方案,请读者自行补充
最后
以上就是含蓄嚓茶最近收集整理的关于《C语言及程序设计》实践参考——n=a!+b!+c!的全部内容,更多相关《C语言及程序设计》实践参考——n=a内容请搜索靠谱客的其他文章。
本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
发表评论 取消回复