这个用什么算法合适?

fatty_xiezheng 2009-08-05 10:15:28
编写一个程序来确定是否存在一个3位整数abc(=100a+10b+c)使abc=a!+b!+c! 我数学和算法基础不是很好。希望大家给一个详细的设计思路。谢谢!
...全文
87 9 打赏 收藏 转发到动态 举报
写回复
用AI写文章
9 条回复
切换为时间正序
请发表友善的回复…
发表回复
chocolate001 2009-08-05
  • 打赏
  • 举报
回复
ding
  • 打赏
  • 举报
回复
这个非常好,就按这思想给个程序。
枚举百位、十位、个位
先列表 a[7]={1、1、2、6、24、120、720}
表明0-6的阶乘
for(int i=1; i<=6; i++)
{
for(int j=0;j<=6; j++)
{
for(int k=0; k<=6; k++)
{
if(i*100+j*10+k == (a[i]+a[j]+a[k])
{
就可以打印这个数出来。
}
}
}
}

[Quote=引用 3 楼 fire_woods 的回复:]
不用编程,推理就可以了

1. a, b, c <=6
2. a, b, c <=5
3. a <=3, b, c <=5
4. a <=2, b, c <=5
5. a <=1, b, c <=5
6. a=1,有解145
[/Quote]
traceless 2009-08-05
  • 打赏
  • 举报
回复
#define MAX 32

int main(void)
{
int FindNum[MAX];
int num,i ;
for(i=0,num=100;num < 999;num++)
{
if(num == sum(num))
{
printf("%d\t",num);
}

}
return 0;
}

int sum(int num)
{
int i,sum1,sum2,sum3,total1,total2,total3;
sum1 = num / 100;
sum2 = sum1 / 10;
sum3 = sum2 % 10;
total1=total2=total=1;
for(i = 1;i <= sum1;i++)
{
total1 *= i;
}
for(i = 1;i <= sum2;i++)
{
total2 *= i;
}
for(i=1;i <= sum3;i++)
{
total3 *=i;
}

return total1 + total2 + total3;
}
hyram 2009-08-05
  • 打赏
  • 举报
回复
可以先排除一下,6的阶乘是720,可见只有1,2,3,4,5可以用
fire_woods 2009-08-05
  • 打赏
  • 举报
回复
不用编程,推理就可以了

1. a, b, c <=6
2. a, b, c <=5
3. a<=3, b, c <=5
4. a<=2, b, c <=5
5. a<=1, b, c <=5
6. a=1,有解145
glorywu 2009-08-05
  • 打赏
  • 举报
回复
穷举。。。
fireseed 2009-08-05
  • 打赏
  • 举报
回复
3位整数,一共900个,循环一下就OK了嘛,程序好简单
fatty_xiezheng 2009-08-05
  • 打赏
  • 举报
回复
6楼的算法我用了 得出的数是145.应该是正解
bacel5902 2009-08-05
  • 打赏
  • 举报
回复
[Quote=引用 3 楼 fire_woods 的回复:]
不用编程,推理就可以了

1. a, b, c <=6
2. a, b, c <=5
3. a <=3, b, c <=5
4. a <=2, b, c <=5
5. a <=1, b, c <=5
6. a=1,有解145
[/Quote]

小子逻辑很强啊!

33,008

社区成员

发帖
与我相关
我的任务
社区描述
数据结构与算法相关内容讨论专区
社区管理员
  • 数据结构与算法社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧