我是靠谱客的博主 含蓄嚓茶,最近开发中收集的这篇文章主要介绍《C语言及程序设计》实践参考——n=a!+b!+c!,觉得挺不错的,现在分享给大家,希望可以做个参考。

概述

返回:贺老师课程教学链接  项目要求


【项目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!所遇到的程序开发问题。

如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。

本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
点赞(38)

评论列表共有 0 条评论

立即
投稿
返回
顶部