- 题目描述:
“水仙花数”是指一个三位数,它的各位数字的立方和等于其本身,比如:153=1^3+5^3+3^3。现在要求输出所有在m和n范围内的水仙花数。
- 思路1:
依次检验m到n中每一个元素,是否满足条件要求,并用数组储存及输出。
- 思路2:
其实符合条件的水仙花数也无非是:153,370,371,407.判断这四个数是否在输入区间内便行。
- 细节:
1).注意到需要一个变量来表示是否有水仙花数,所以这个变量需要在每次循环时重新初始化,注意行末无多余空格。
2).第二种思路,比较难操作的地方就是对于是否输出空格,这里采取的方法是检验下一个水仙花数是否也在区间内。所以储存水仙花数的数组不仅仅只有4个数。
- 源代码1:
#include<iostream> #include<cstdio> #include<cstring> using namespace std; int a[1010]; int main() { int n,m,i,flag=0,sum=0,b,c,d; for(i=100;i<1000;i++) { b=i%10,c=(i/10)%10,d=i/100; if(i==b*b*b+c*c*c+d*d*d) a[i]=1; } while(cin>>n>>m) { sum=0,flag=0; for(i=n;i<=m;i++) { if(a[i]&&!flag) { flag=1; cout<<i; sum++; } else if(a[i]&&flag) { cout<<" "<<i; sum++; } } if(sum==0) cout<<"no"; cout<<endl; } }
- 源代码2:
#include<iostream> using namespace std; int main () { int a[5]={153,370,371,407,1005}; int n,m; while(cin>>m>>n) { int b=1; for(int i=0;i<4;i++) { if(a[i]<=n&&a[i]>=m) { b=0; cout<<a[i]; if(a[i+1]<=n&&a[i+1]>=m) cout<<' '; } } if(b) cout<<"no"; cout<<endl; } return 0; }