鱼C论坛

 找回密码
 立即注册
查看: 1693|回复: 4

萌新求帮助

[复制链接]
发表于 2022-4-10 21:02:58 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能^_^

您需要 登录 才可以下载或查看,没有账号?立即注册

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

#include<stdio.h>
int main()
{
        int i,n=1099,a[3],p,num=0;
        for(i=100;i<1000;i++)
        {
                int c=i;
                for(p=0;p<3;p++)
                {
                        a[p]=i%10;
                        i=i/10;
                        num=num+(a[p]*a[p]*a[p]);                       
                }
                if(num==n)
                        {
                                printf("%d\n",c);
                        }
        }
        system("pause");
        return 0;
}
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2022-4-10 21:08:24 From FishC Mobile | 显示全部楼层
这逻辑好乱啊
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2022-4-10 21:52:09 | 显示全部楼层
首先揣摩楼主的意思,是想将个位、十位、百位分别放入整型数组的元素a[0] 、a[1] 、a[2]。
三个变量,我感觉不需要整型数组,用了整型数组求立方会多一层循环。还不如直接定义三个整型变量存放个位、十位、百位。最后附上代码,希望能帮到你...
#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;
}
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 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[3],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[p]=t%10;
        //              printf("a[%d]: %d\n", p, a[p]);
                        t=t/10;
                        num=num+(a[p]*a[p]*a[p]);
                }
        //      printf("%d%d%d\n",a[2], a[1], a[0]);
        //      printf("%d%d%d of num: %d\n", a[2], a[1], a[0], num);
                if(num==n){
                        printf("%d\n",i);
                }
        }
        return 0;
}
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2022-4-11 10:32:46 From FishC Mobile | 显示全部楼层
#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
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2024-10-5 18:24

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表