首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 开发语言 > C++ >

HDOJ 2010 水仙花 显示 演示异常

2013-01-18 
HDOJ 2010 水仙花显示 演示错误?#includestdio.h#includemath.hint main(){ int m,n,temp,a,b,c,i,num

HDOJ 2010 水仙花 显示 演示错误?

#include<stdio.h>
#include<math.h>
int main()
{
 int m,n,temp,a,b,c,i,num=0;        //num判断是否出现过水仙花数
 while(scanf("%d%d",&m,&n)!=EOF)
 {
 num=0;
 if(m>n)
 {
 temp=m;
 m=n;
 n=temp;
 }
 while(m<=n)
 {  
 a=m/100;//取其百位数字
         b=m/10%10;//取其十位数字
         c=m%10;//取其个位数字
         
 if( m==(pow(a,3)+pow(b,3)+pow(c,3))   )
 {
 printf("%d ",m);
 num=1;
 }
 ++m;
 }
 if(num)
       printf("\n");
 else
       printf("no\n");
 }
 return 0;
}




一直显示演示错误。。。可是我演示的明明对的,求解。。。
[解决办法]
按照你改的程序,如果存在水仙花数,末尾会多一个空格,这可能就是你失败的原因。
另外你使用了math.h,这也许会导致超过time/memory limit。
由于输入已经保证了m <= n,所以不用swap m n的值。

# include <stdio.h>
 
int main()
{
    int m, n, a, b, c, num;
    while (scanf("%d%d", &m, &n) != EOF)
    {
        num = 0;
        while (m <= n)
        {
            a = m / 100;
            b = m / 10 % 10;
            c = m % 10;
 
            if (m == a * a * a + b * b * b + c * c * c)
            {
                num += 1;
                if (num == 1)
                    printf("%d", m);
                else
                    printf(" %d", m);
            }
            m++;
        }
        if (num)
            printf("\n");
        else
            printf("no\n");
    }
 
    return 0;
}

OJ比你想象的严格。

------解决方案--------------------


Presentation Error是print结果格式错误
你的每一行都会多一个空格,因为printf("%d ",m);
先判断一下num,如果这一行已经print过了,用" %d",否则是第一个用"%d",这样就可以ac了

热点排行