ACM求大神错哪里了,hdu2010水仙花数
#include<stdio.h>intmain(){intm;intn;scanf("%d%d",&m,&n);intc=m;if(m>n){m=n;n=c;}intt...
#include <stdio.h>
int main()
{
int m;
int n;
scanf("%d %d",&m ,&n);
int c=m;
if(m>n)
{
m=n;
n=c;
}
int t=0;
int i=0;
for(i=m;i<=n;i++)
{
int a=0;
int b=i;
while(b>0)
{
a=a+(b%10)*(b%10)*(b%10);
b=b/10;
}
if(a==i)
{
printf("%d ",i);
t++;
}
}
if(t==0)
{
printf("no");
}
return 0;
} 展开
int main()
{
int m;
int n;
scanf("%d %d",&m ,&n);
int c=m;
if(m>n)
{
m=n;
n=c;
}
int t=0;
int i=0;
for(i=m;i<=n;i++)
{
int a=0;
int b=i;
while(b>0)
{
a=a+(b%10)*(b%10)*(b%10);
b=b/10;
}
if(a==i)
{
printf("%d ",i);
t++;
}
}
if(t==0)
{
printf("no");
}
return 0;
} 展开
1个回答
展开全部
你的代码没问题,运行了一下可以输出水仙花数,然后我去查了杭电的具体题目,才知道是你的输入和输出不对,先说输入,你的输入只有一次,但是题目的原话是——
“输入数据有多组,每组占一行,包括两个整数m和n(100<=m<=n<=999)。”
所以你的输入“scanf("%d %d",&m ,&n);”应该改成——
while(scanf("%d %d",&m ,&n)!=EOF){
/*中间具体代码*/
}
意思是每当有输入的时候就执行中间的具体代码。("!=EOF"的大概意思是输入不为空,实在想知道具体意思的话可以自己去查一下,这里就不多说了。)
然后是输出问题,这只是个小问题,但没意识到的话确实很难找出来,原题对输出的描述——
"如果有多个,则要求从小到大排列在一行内输出,之间用一个空格隔开"
所谓之间用一个空格隔开,是指1 2 3 4 5这种(5后面没有空格),而不是1 2 3 4 5 这种(5后面有空格),看你的代码,输出的明显就是后一种,所以你的不对,修改方法的话,你自己看下面的具体代码吧——
#include <stdio.h>
int main()
{
int m;
int n;
while(scanf("%d %d",&m ,&n)!=EOF){
int c=m;
if(m>n)
{
m=n;
n=c;
}
int t=0;
int i=0;
for(i=m;i<=n;i++)
{
int a=0;
int b=i;
while(b>0)
{
a=a+(b%10)*(b%10)*(b%10);
b=b/10;
}
if(a==i)
{
if(t==0)//第一次输出只输出一个数,后面每次输出都输出空格和一个数
printf("%d",i);
else printf(" %d",i);
t++;
}
}
if(t==0)
{
printf("no\n");
}
else printf("\n");//不要忘了最后的回车
}
return 0;
}
我亲自测试提交可以通过。另外你的代码还有些不是问题的小问题,我懒的改了,以后自己回头看看自己现在的代码也是蛮有意思的事,不是吗?
追问
大神啊 作为一个准备钻进acm的大一新生,我非常非常希望能得到您的QQ号码,不知道可不可以,如果您觉得耽误您的时间,我也不强求。多谢。
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询