关键是用除法、取余方式找出每一位数
//水仙花数
#include <stdio.h>
int main()
{
int a=100;
while(a<1000)
{
int a1=a/100;
int a2=(a%100)/10;
int a3=a%10;
if(a==a1*a1*a1+a2*a2*a2+a3*a3*a3)
{
printf("%d是水仙花数\n",a);
}
a++;
}
return 0;
}
这当然是我们能想到的最简单的找出水仙花数的方法,但其实我们可以用另一种思路来优化这个程序的算法。
不妨先看一个非常简单的问题:买鸡问题,题目如下:
百元买百鸡,公鸡三块,母鸡两块五,小鸡五毛。问可以如何买。
代码如下:
//买鸡问题
#include <stdio.h>
int main()
{
int a,b,c;
for(a=0;a<=33;a++)
for(b=0;b<=40;b++)
for(c=0;c<=200;c++)
if(a+b+c==100&&(3*a+2.5*b+0.5*c)==100)
printf("可以这样买:公鸡买%d,母鸡买%d,小鸡买%d\n",a,b,c);
return 0;
}
通过这个简单的问题,我们不难发现一种搜索多个符合条件的数的方法——利用多个循环逐一判断。那么我们可以对筛选水仙花数的代码做一调整。
代码如下:
//水仙花数
#include <stdio.h>
int main()
{
int a,b,c;
for(a=0;a<=9;a++)
for(b=0;b<=9;b++)
for(c=0;c<=9;c++)
if(a*a*a+b*b*b+c*c*c==100*a+10*b+c&&100*a+10*b+c>=100)
printf("%d%d%d是水仙花数\n",a,b,c);
return 0;
}
这样的选取方法就会优秀很多。