杭电ACM 2010水仙花数
#include<stdio.h>main(){intm,n,a,b,c,d=0;while(scanf("%d%d",&m,&n)!=EOF){while(m<=n){...
#include <stdio.h>
main()
{
int m,n,a,b,c,d=0;
while(scanf("%d %d",&m,&n)!=EOF)
{
while(m<=n)
{
a=m%10;
b=(m%100)/10;
c=m/100;
if(a*a*a+b*b*b+c*c*c==m)
{
printf("%d ",m);
d++;
}
m++;
}
if(d==0) printf("no");
printf("\n");
}
}
提交显示"WA",不知道哪里错了?
还请指点。
是C语言
我按照输入什么的都可以出来一模一样的结果,提交就不对了 展开
main()
{
int m,n,a,b,c,d=0;
while(scanf("%d %d",&m,&n)!=EOF)
{
while(m<=n)
{
a=m%10;
b=(m%100)/10;
c=m/100;
if(a*a*a+b*b*b+c*c*c==m)
{
printf("%d ",m);
d++;
}
m++;
}
if(d==0) printf("no");
printf("\n");
}
}
提交显示"WA",不知道哪里错了?
还请指点。
是C语言
我按照输入什么的都可以出来一模一样的结果,提交就不对了 展开
展开全部
#include<stdio.h>
int main()
{
int b, l, c, i;
int a[] = {1, 153, 370, 371, 407};
while (scanf("%d%d", &b, &l) != EOF)
{
c = 0;
for (i = 0 ; i < 5 ; i++)
{
if (a[i] >= b && a[i] <= l)
printf(c++ ? " %d" : "%d", a[i]);
}
printf(c ? "\n" : "no\n");
}
return 0;
}
这个是正确答案,算法效率比较高,已提交过,accepted
int main()
{
int b, l, c, i;
int a[] = {1, 153, 370, 371, 407};
while (scanf("%d%d", &b, &l) != EOF)
{
c = 0;
for (i = 0 ; i < 5 ; i++)
{
if (a[i] >= b && a[i] <= l)
printf(c++ ? " %d" : "%d", a[i]);
}
printf(c ? "\n" : "no\n");
}
return 0;
}
这个是正确答案,算法效率比较高,已提交过,accepted
展开全部
while(m<=n)
改用FOR语句,给M赋100开始,你的问题就出在这里
改用FOR语句,给M赋100开始,你的问题就出在这里
追问
M、N都是需要输入的,不是固定值
追答
是否少了return 0而无法正常结束?
学的C++,^-^所以没注意有m,n的输入。刚刚研究了一下,程序主体应该是没有问题的
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
这位是刚开始搞ACM的吧,这边有三个错误,但是都不是其他两位回答的,
第一个是基本知识,提交ACM题目主函数要命名为int型,并且结尾要加return 0;
第二个是逻辑错误,当你每次重新打入m,n时,你的水仙花个数都要给它清零,也就是d要再输入后清零。
最后是输出问题,仔细看看输出要求,“则要求从小到大排列在一行内输出,之间用一个空格隔开;”
也就是你输出的最后一个数后面是没有空格的,这里我用了一个判断来实现,当d=0时,也就是第一次输出时,我的数字前面没空格,之后输出空格再输出数字。
#include <stdio.h>
int main()
{
int m,n,a,b,c,d;
while(scanf("%d %d",&m,&n)!=EOF)
{
d=0; //每次输入要初始化个数。
while(m<=n)
{
a=m%10;
b=(m%100)/10;
c=m/100;
if(a*a*a+b*b*b+c*c*c==m)
{
if(d==0) printf("%d",m);
else printf(" %d",m);
d++;
}
m++;
}
if(d==0) printf("no\n");
else printf("\n");
}
return 0;
}
这个直接提交就能过,刚提交了下
第一个是基本知识,提交ACM题目主函数要命名为int型,并且结尾要加return 0;
第二个是逻辑错误,当你每次重新打入m,n时,你的水仙花个数都要给它清零,也就是d要再输入后清零。
最后是输出问题,仔细看看输出要求,“则要求从小到大排列在一行内输出,之间用一个空格隔开;”
也就是你输出的最后一个数后面是没有空格的,这里我用了一个判断来实现,当d=0时,也就是第一次输出时,我的数字前面没空格,之后输出空格再输出数字。
#include <stdio.h>
int main()
{
int m,n,a,b,c,d;
while(scanf("%d %d",&m,&n)!=EOF)
{
d=0; //每次输入要初始化个数。
while(m<=n)
{
a=m%10;
b=(m%100)/10;
c=m/100;
if(a*a*a+b*b*b+c*c*c==m)
{
if(d==0) printf("%d",m);
else printf(" %d",m);
d++;
}
m++;
}
if(d==0) printf("no\n");
else printf("\n");
}
return 0;
}
这个直接提交就能过,刚提交了下
本回答被提问者采纳
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
先算最高位c,再求b
b=(m-c*100)/10;
这是我原来用C++写的,你改成c吧!
#include<iostream>
using namespace std;
int main()
{ int m,n,x,y,z;
cin>>m>>n;
int flag=0;
for(int i=m;i<=n;i++)
{
x=i/100;
y=(i-x*100)/10;
z=i%10;
if(i==x*x*x+y*y*y+z*z*z)
{
cout<<i<<" ";
flag=1;
}
}
if(!flag)
{
cout<<"no"<<endl;
}
return 0;
}
b=(m-c*100)/10;
这是我原来用C++写的,你改成c吧!
#include<iostream>
using namespace std;
int main()
{ int m,n,x,y,z;
cin>>m>>n;
int flag=0;
for(int i=m;i<=n;i++)
{
x=i/100;
y=(i-x*100)/10;
z=i%10;
if(i==x*x*x+y*y*y+z*z*z)
{
cout<<i<<" ";
flag=1;
}
}
if(!flag)
{
cout<<"no"<<endl;
}
return 0;
}
追问
C++没有学过啊
cout<<i<<" ";
这句什么意思
追答
输出i 后面跟一个空格
cin 输入
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询