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了