求这样一个 n 位数( >0 ),它等于其各位数字的阶乘之和.输入位数 n ,输出所有满足条件的 n 位数
例如,145=1 +4 +5 若不存在这样的 n 位数,则输出:"No output\n".输入:n 输出:满足条件的 n 位数
#include
main()
{int n,i,k=0,a,b,s,m0,m=1;
scanf("%d",&n);
for(i=1;i=m0;m--)
{for(i=1,s=0;i0;b--)
a=a*b;
s+=a;}
if(s==m){printf("%d\n",m);k++;}}
if(k==0)printf("No output\n");
}
这个程序是对的,但是输入1的时候,程序是输出 2 1.怎么让其输出的是 1 2
人气:462 ℃ 时间:2019-10-09 10:41:57
解答
伪代码:
input n
int result = 0; (就是所求的数)
首先算出当result最小的阶乘数(比如三位数的话就是120 = 5!,4就不行了,以此来确定至少有一位要是5),再算出当result最大的阶乘数,(即<999,6!=720.所以任一位都不能大于6!).
求出这些限制条件后,再用枚举,找到一个就打印出来,一个都没找到就打印No output!.应该没什么问题了.
=========
基本算法就是这些了,如果有更好的算法,欢迎指正!:)
推荐
猜你喜欢
- 143、对于这样几个网段:172.128.12.0,172.128.17.0,172.128.18.0,172.128.19.0,最好用下列哪些网段实现路由汇总?(C)
- 5%葡萄糖500ML加25%硫酸镁40ML要求每小时滴一克,每分钟滴多少滴?提示:25%硫酸镁为2.5克,10ML一支
- 十三点二除以八点八乘零点八怎样简算
- 多读课外书,可以使我们增长知识和写作水平.改病句
- 想想汶川大地震情景,你对灾难有什么看法
- I'll be waiting for you和I'll wait for you有什么区别?
- 这句话是一般将来时的被动语态?
- 在1~500中,不能被2,3,7整除的数有多少个?