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;
}
展开
 我来答
51CTO学院
2015-11-16 · 中国最大的IT实战在线培训平台
51CTO学院
中国最大的IT实战在线教育培训平台。
向TA提问
展开全部

你的代码没问题,运行了一下可以输出水仙花数,然后我去查了杭电的具体题目,才知道是你的输入和输出不对,先说输入,你的输入只有一次,但是题目的原话是——

“输入数据有多组,每组占一行,包括两个整数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号码,不知道可不可以,如果您觉得耽误您的时间,我也不强求。多谢。
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式