题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=2010
思路:1.定义两个范围在100-999的整数吗m,n,从m开始分解三位数的每一个组成数字,用for语句进行判断循环,判断它的各位数字的立方和是否等于其本身;
2.在范围里如果有多个数,则进行排序,这个就利用for循环时输出即可;
3.定义一个flat,如果有一个输出,则flat=0,在下一个输出的时候flat就会变为输出空格,用这个来满足题目中输出的数据之间用一个空格隔开。
代码:
#include "stdio.h"
void main()
{
int m,n,a,b,c,i,sum,flag,flat;
while(scanf("%d %d",&m,&n)!=EOF)
{
if(m<100||m>n||n>999) break;
{ sum=0;
flag=0;
flat=1;
for(i=m;i<=n;i++)
{
a=i/100;
b=i/10%10;
c=i%10;
sum=a*a*a+b*b*b+c*c*c;
if(sum==i)
{
if(flat)
flat=0;
else
printf(" ");
printf("%d",i);
flag=1;
}
if(flag==0&&i==n)
{
printf("no");
}
}
printf("\n");
}
}
}
小结:这道题重点是我学到了一个新的可以让输出的数据用一个空格隔开的方法。就是利用定义一个flat,然后判断它的与否以及利用if语句,成功地让输出的数据之间都有一个空格,而最后一个数据输出之后不会再有空格。如果用以前那种方法的话,在printf语句里加个空格,那么就会在输出最后一个数据之后还会有空格,这样就不符合题目要求。