概述
返回:贺老师课程教学链接 项目要求
【项目2 - n=a!+b!+c!】
求满足条件n=a!+b!+c!的所有三位数n并输出,其中a,b,c分别为n的百、十、个位数。
[参考解答]
解法1:n为3位数,n由100循环到999,每次循环,分离出百、十、个位数,以此判断
#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组织循环
#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的思路做,减少了求阶乘的次数
#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!+b!+c!所遇到的程序开发问题。
如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。
本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
发表评论 取消回复