qwerasdftgy 发表于 2022-4-10 21:02:58

萌新求帮助

编写程序,求出所有各位数字的立方和等于1099的3位数
实在找不出来哪里有问题{:5_107:}
谢谢大佬们

#include<stdio.h>
int main()
{
        int i,n=1099,a,p,num=0;
        for(i=100;i<1000;i++)
        {
                int c=i;
                for(p=0;p<3;p++)
                {
                        a=i%10;
                        i=i/10;
                        num=num+(a*a*a);                       
                }
                if(num==n)
                        {
                                printf("%d\n",c);
                        }
        }
        system("pause");
        return 0;
}

wp231957 发表于 2022-4-10 21:08:24

这逻辑好乱啊

cjgank 发表于 2022-4-10 21:52:09

首先揣摩楼主的意思,是想将个位、十位、百位分别放入整型数组的元素a 、a 、a。
三个变量,我感觉不需要整型数组,用了整型数组求立方会多一层循环。还不如直接定义三个整型变量存放个位、十位、百位。最后附上代码,希望能帮到你...
#include <stdio.h>
#include <math.h>

int main()
{
    //求出所有各位数字的立方和等于1099的3位数
    int ge = 0, shi = 0, bai = 0;
    int sum = 0, count = 0;
    for (int num = 100; num < 1000; num++)
    {
      bai = num /100;       //分离百位数字
      shi = num % 100 / 10; //分离十位数字
      ge = num % 10;      //分离个位数字
      sum = pow(bai, 3) + pow(shi, 3) + pow(ge, 3);
      if (1099 == sum)
      {
            count++;
            printf ("%d ", num);
      }
    }
    printf ("\n");
    if (count > 0)
      printf ("符合条件的三位数共有%d个\n", count);
    else
      printf ("没有符合条件的三位数\n");
   
    return 0;
}

风车呼呼呼 发表于 2022-4-11 00:04:17

调试了一下,你的代码有几个问题:
1.
在外层for循环中,看起来i是从100递增到999,但是经过内层循环,i已经连续对10取余3次了,这时候i只是原本三位数中百位上的数字。
第一次循环之后,i从开始的100,变成了1,然后再走外循环i++,第二次外循环开始的时候i已经变成2,而不是预想当中的101。
2.
在循环中,num变量是用来表示这个3位数各位上的立方和,但是每一次新的遍历开始,你并没有重置num,导致num一直在积累数据,当然得不到答案。

具体可以看下面代码进行对比,其实可以只把我的那几条注释代码添加到你自己的代码中,自己调试发现问题就比较直观
#include<stdio.h>
int main(void){
      int i,n=1099,a,p,num=0;
      for(i=100;i<1000;i++){
                int t=i, num=0;
      //      printf("i= %d\n", i);
                for(p=0;p<3;p++){
                        a=t%10;
      //            printf("a[%d]: %d\n", p, a);
                        t=t/10;
                        num=num+(a*a*a);
                }
      //      printf("%d%d%d\n",a, a, a);
      //      printf("%d%d%d of num: %d\n", a, a, a, num);
                if(num==n){
                        printf("%d\n",i);
                }
      }
      return 0;
}

傻眼貓咪 发表于 2022-4-11 10:32:46

#include <stdio.h>

// 编写程序,求出所有各位数字的立方和等于1099的3位数

int F(int num){
        int a, b, c;
        a = num / 100;
        b = (num % 100) / 10;
        c = num % 10;
        return a*a*a + b*b*b + c*c*c;
}

int main(){
        for(int num = 100; num < 1000; num++){
                if(F(num) == 1099){
                        printf("%d\n", num);
                }
        }
        return 0;
}379
397
739
793
937
973
页: [1]
查看完整版本: 萌新求帮助