水仙花数的问题

时间:2022-04-29 16:37:19
这个是杭电ACM的2010题目  http://acm.hdu.edu.cn/showproblem.php?pid=2010
 

#include<stdio.h>
#include<math.h>
int main()
{
  int n,m,i,j,k,x,y,l;

  while(scanf("%d %d",&m,&n)!=EOF)
  {
    
  for(i=m,l=0;i<=n;i++)
  {
  j=i/100;
  k=i/10%10;
  x=i%10;
  y=(j*j*j+k*k*k+x*x*x);
  if(i==y)
  printf("%d ",l=i);
  }
  if(l==0)
  printf("no\n");
  else
  printf("\b\n");
  }
  return(0);
}



运行完全没问题  就是不能AC  我纠结好久了  就是找不出问题来  

15 个解决方案

#1


这个程序就是从m开始到n中间的水仙花数都打出来,有一个while的作用是为了能多次输入结果。可以不用while()的

scanf()的返回值有0和1,当输入是符合条件就是1

#2


ACM出这种题目?这个源代码是你们写的?

#3


引用 2 楼 mathphysic 的回复:
ACM出这种题目?这个源代码是你们写的?

对啊。。。。。

#4



void main()
{
int n,i,j,k,sum;
printf("所有的水仙花数如下:\n");
for (n=100;n<1000;n++)
{
i = n%10;
j = n/10%10;
k = n/100;
sum = i*i*i+j*j*j+k*k*k;
if(n == sum)
{
printf("%d\t",n);
}
}
printf("\n");
}

#5


你那样的代码真的看不上、、、

#6


引用 4 楼 yangsen600 的回复:
C/C++ code

void main()
{
    int n,i,j,k,sum;
    printf("所有的水仙花数如下:\n");
    for (n=100;n<1000;n++)
    {
        i = n%10;
        j = n/10%10;
        k = n/100;
        sum = i*i*i+j*j……

还是这个代码简单清晰啊

#7


baike.baidu.com/view/152077.htm
楼上说的很清楚了,再看看这个吧!

#8


主要是格式的问题啊

#9


春天是鲜花的季节,水仙花就是其中最迷人的代表,数学上有个水仙花数,他是这样定义的:
“水仙花数”是指一个三位数,它的各位数字的立方和等于其本身,比如:153=1^3+5^3+3^3。
现在要求输出所有在m和n范围内的水仙花数。

 

Input
输入数据有多组,每组占一行,包括两个整数m和n(100<=m<=n<=999)。
 

Output
对于每个测试实例,要求输出所有在给定范围内的水仙花数,就是说,输出的水仙花数必须大于等于m,并且小于等于n,如果有多个,则要求从小到大排列在一行内输出,之间用一个空格隔开;
如果给定的范围内不存在水仙花数,则输出no;
每个测试实例的输出占一行。
 

Sample Input
100 120
300 380
 

Sample Output
no
370 371



这是原题

#10


引用 9 楼 zsy61314 的回复:
Input
输入数据有多组,每组占一行,包括两个整数m和n(100<=m<=n<=999)

Output
对于每个测试实例,要求输出……

Sample Input
100 120
300 380
 

Sample Output
no
370 371


关键是你的不支持多组输入,一次性输出。。。。
看看人家的格式要求,不是输入一次输出一次,而是输入多从,一次性全部输出来。


#include <stdio.h>
#include <math.h>

int main()
{
    int i, j;
    int m = 0, n = 0;
    int ans1, ans2, ans3;
    int mm[100], nn[100];
    printf("input m and n: (100<=m<=n<=999)\n");
    while(scanf("%d %d", &(mm[m++]), &(nn[n++])) != EOF)
        ;
    for(j = 0; j < m - 1; j++)
    {
        int flag = 0;
        for(i=mm[j]; i <=nn[j]; i++)
        {
            ans1 = i % 10;
            ans2 = (i/10) % 10;
            ans3 = (i/100) % 10;
            if(i == (int)pow(ans1, 3) + (int)pow(ans2, 3) + (int)pow(ans3, 3))
            {
                printf("%d ", i);
                flag = 1;
            }
        }
        if(flag == 0)
            printf("no");
        printf("\n");
    }
    return 0;
}

#11


#include<stdio.h>
#include<conio.h>
main()
{
int i,j,k,n;
printf("'water flower'number is:");
for(n=100;n<1000;n++)
  {
  i=n/100;
  j=(n-i*100)/10;
  k=n%10;
  if(i*i*i+j*j*j+k*k*k==n)
    printf("%d\n",n);
  }
  getch();
}

#12


这里面有代码+分析,你可以看看:

http://www.wutianqi.com/?p=335


此题输出数的最后一位不能多一个空格

#13


引用 12 楼 wtq493841534 的回复:
这里面有代码+分析,你可以看看:

http://www.wutianqi.com/?p=335


此题输出数的最后一位不能多一个空格
我貌似用\b去掉空格了啊  还是不能AC

#14


引用 13 楼 zsy61314 的回复:
引用 12 楼 wtq493841534 的回复:
这里面有代码+分析,你可以看看:

http://www.wutianqi.com/?p=335


此题输出数的最后一位不能多一个空格
我貌似用\b去掉空格了啊  还是不能AC


晕了,在ACM里,对格式的输出掌握也很重要。
就比如说每两个数之间有空格,这时最后一个数后面就不能有空格了,那么输出就不能单纯的printf("%c ", ...);
而应该判断是否是最后一位再输出。
建议你看下HDOJ的课件,第一个就是介绍各种输出格式的。

#15


你可以加这个群和大家一起讨论下,是ACM群:
119154131

#1


这个程序就是从m开始到n中间的水仙花数都打出来,有一个while的作用是为了能多次输入结果。可以不用while()的

scanf()的返回值有0和1,当输入是符合条件就是1

#2


ACM出这种题目?这个源代码是你们写的?

#3


引用 2 楼 mathphysic 的回复:
ACM出这种题目?这个源代码是你们写的?

对啊。。。。。

#4



void main()
{
int n,i,j,k,sum;
printf("所有的水仙花数如下:\n");
for (n=100;n<1000;n++)
{
i = n%10;
j = n/10%10;
k = n/100;
sum = i*i*i+j*j*j+k*k*k;
if(n == sum)
{
printf("%d\t",n);
}
}
printf("\n");
}

#5


你那样的代码真的看不上、、、

#6


引用 4 楼 yangsen600 的回复:
C/C++ code

void main()
{
    int n,i,j,k,sum;
    printf("所有的水仙花数如下:\n");
    for (n=100;n<1000;n++)
    {
        i = n%10;
        j = n/10%10;
        k = n/100;
        sum = i*i*i+j*j……

还是这个代码简单清晰啊

#7


baike.baidu.com/view/152077.htm
楼上说的很清楚了,再看看这个吧!

#8


主要是格式的问题啊

#9


春天是鲜花的季节,水仙花就是其中最迷人的代表,数学上有个水仙花数,他是这样定义的:
“水仙花数”是指一个三位数,它的各位数字的立方和等于其本身,比如:153=1^3+5^3+3^3。
现在要求输出所有在m和n范围内的水仙花数。

 

Input
输入数据有多组,每组占一行,包括两个整数m和n(100<=m<=n<=999)。
 

Output
对于每个测试实例,要求输出所有在给定范围内的水仙花数,就是说,输出的水仙花数必须大于等于m,并且小于等于n,如果有多个,则要求从小到大排列在一行内输出,之间用一个空格隔开;
如果给定的范围内不存在水仙花数,则输出no;
每个测试实例的输出占一行。
 

Sample Input
100 120
300 380
 

Sample Output
no
370 371



这是原题

#10


引用 9 楼 zsy61314 的回复:
Input
输入数据有多组,每组占一行,包括两个整数m和n(100<=m<=n<=999)

Output
对于每个测试实例,要求输出……

Sample Input
100 120
300 380
 

Sample Output
no
370 371


关键是你的不支持多组输入,一次性输出。。。。
看看人家的格式要求,不是输入一次输出一次,而是输入多从,一次性全部输出来。


#include <stdio.h>
#include <math.h>

int main()
{
    int i, j;
    int m = 0, n = 0;
    int ans1, ans2, ans3;
    int mm[100], nn[100];
    printf("input m and n: (100<=m<=n<=999)\n");
    while(scanf("%d %d", &(mm[m++]), &(nn[n++])) != EOF)
        ;
    for(j = 0; j < m - 1; j++)
    {
        int flag = 0;
        for(i=mm[j]; i <=nn[j]; i++)
        {
            ans1 = i % 10;
            ans2 = (i/10) % 10;
            ans3 = (i/100) % 10;
            if(i == (int)pow(ans1, 3) + (int)pow(ans2, 3) + (int)pow(ans3, 3))
            {
                printf("%d ", i);
                flag = 1;
            }
        }
        if(flag == 0)
            printf("no");
        printf("\n");
    }
    return 0;
}

#11


#include<stdio.h>
#include<conio.h>
main()
{
int i,j,k,n;
printf("'water flower'number is:");
for(n=100;n<1000;n++)
  {
  i=n/100;
  j=(n-i*100)/10;
  k=n%10;
  if(i*i*i+j*j*j+k*k*k==n)
    printf("%d\n",n);
  }
  getch();
}

#12


这里面有代码+分析,你可以看看:

http://www.wutianqi.com/?p=335


此题输出数的最后一位不能多一个空格

#13


引用 12 楼 wtq493841534 的回复:
这里面有代码+分析,你可以看看:

http://www.wutianqi.com/?p=335


此题输出数的最后一位不能多一个空格
我貌似用\b去掉空格了啊  还是不能AC

#14


引用 13 楼 zsy61314 的回复:
引用 12 楼 wtq493841534 的回复:
这里面有代码+分析,你可以看看:

http://www.wutianqi.com/?p=335


此题输出数的最后一位不能多一个空格
我貌似用\b去掉空格了啊  还是不能AC


晕了,在ACM里,对格式的输出掌握也很重要。
就比如说每两个数之间有空格,这时最后一个数后面就不能有空格了,那么输出就不能单纯的printf("%c ", ...);
而应该判断是否是最后一位再输出。
建议你看下HDOJ的课件,第一个就是介绍各种输出格式的。

#15


你可以加这个群和大家一起讨论下,是ACM群:
119154131