杭电11页2010题,求水仙花数。。求改错。。

2024-11-22 06:15:06
推荐回答(4个)
回答1:

#include
//#include
#include
int main()
{
int m,n,t,i;
int a,b,c;//flag=0; 这个放这不合适吧,第二次计算就没有初始化了,放后面吧
while(scanf("%d%d",&m,&n)!=EOF)
{
int flag=0;
if(m>n)
{t=m;m=n;n=t;}//花括号要记得加,这是不应该犯的错误啊;
for(i=m;i<=n;i++)//n也是包括的。注意读题
{
a=i/100;
b=(i-a*100)/10;
c=i%10;
if(i==(pow(a*1.0,3.0)+pow(b*1.0,3.0)+pow(c*1.0,3.0)))//pow函数是浮点型的,这个vc6++不会报错,但杭电会CE,这是肯定的;
{ //你漏了花括号吧,明显是找到一个水仙花数就直接输出来的
flag==1?printf(" %d",i):printf("%d",i);//要注意控制格式,acm一个空格,一行出错都会PE的
flag=1;
}
}
if(flag==1)
printf("\n");
else
printf("no\n");//又忘了换行。。。太粗心了啊
}
//system("PAUSE"); acm不需要这个,加了反而是多出了一行错误答案。
return 0;
}

改过了,你的代码已经可以AC。。。
不过LZ太粗心了,以后要注意了,acm是个很严谨的东西,而且这是很注重的输出结果的。
你少了一个空格,少了一行,A不了;多了什么比如system("PAUSE"); 就会比标准答案多了一些乱七八糟的东西,也是错的。
所以希望LZ继续加油,继续努力!!

回答2:

pow(a,3)+pow(b,3)+pow(c,3)这句有问题,产生了二义性,pow函数有5种原型:
long double pow(long double _X, int _Y)
long double pow(long double _X, long double _Y)
float pow(float _X, int _Y)
float pow(float _X, float _Y)
double pow(double _X, int _Y)
你的a,b,c是int型,可以转换为long double、float、double中的任意一种,所以改法有6种:
将a,b,c声明为以上3种类型之一,或者进行强制转换
还有:
if(m>n)
t=m;m=n;n=t;
这句应该加大括号即:
if(m>n)
{
t=m;
m=n;
n=t;
}
还有,建议把main函数里的参数去了,没用

回答3:

楼主别吝啬括号啊,给你改了
#include
#include
#include
int main(int argc, char *argv[])
{
int m,n,t,i;
int a,b,c,flag=0;
while(scanf("%d%d",&m,&n)!=EOF)
{
if(m>n) //用括号括住
{
t=m;
m=n;
n=t;
}
for(i=m;i {
a=i/100;
b=(i-a*100)/10;
c=i%10;
if(i==(pow((double)a,3)+pow((double)b,3)+pow((double)c,3))) //用括号括住
{
flag=1;
printf("%d ",i);
}
}
if(flag==1)
printf("\n");
else
printf("no");
}
system("PAUSE");
return 0;
}

回答4:

#include
#include
#include
int main()
{
int n,m;
while(scanf("%d %d",&n,&m)==2)
{
int k=0,flag=0;
for(int i=n;i<=m;i++)
{
if(i==(i/100)*(i/100)*(i/100)+(i/10%10)*(i/10%10)*(i/10%10)+(i%10)*(i%10)*(i%10))
{
if(flag)
{
printf(" ");
printf("%d",i);
}
else
{
flag=1;
printf("%d",i);
}
k++;

}
}
if(k==0)
printf("no");
printf("\n");
}
return 0;
}