今天做一道很简单的题目,就是求水仙花数。
说简单,那是简单到家,说难,那也不是一般难。想再网络上找到高效的代码,结果:(
如果只想得出结果,那么
#include <stdio.h>
int main()
{
int shu,bai,shi,ge;
for (shu=100;shu<1000;shu++)
{
bai=shu/100;
shi=(shu-bai*100)/10;
ge=shu-bai*100-shi*10;
if(shu==(bai*bai*bai+shi*shi*shi+ge*ge*ge))
printf("%d/n",shu);
}
}
main(){
int a,b,c,num;
for(a=1;a<10;a++){
for(b=0;b<10;b++){
for(c=0;c<10;c++){
if(a*100+b*10+c==(num=a*a*a+b*b*b+c*c*c))
printf("%d",num);
}
}
}
}
这两种算法都行。
第二种避开了除法运算,效率会高点。
但都不是好答案。因为这些人写出的程序都没有避免遍滤100-999每一个数。
我觉得应该会有一种可行的数学方法来排除不必要的循环次数,也就是说,再程序运行之前,我们就预先知道符合某种条件的三位数不可能是水仙花数,从而排除。
继续搜索…………