鱼C论坛

 找回密码
 立即注册
查看: 1904|回复: 3

[已解决]不清楚这是什么情况啊

[复制链接]
发表于 2022-8-8 22:10:48 | 显示全部楼层 |阅读模式
60鱼币

#include <stdio.h>
#include <math.h>
int main()
{
        int a,a3,i,sum,b,c;
        
        printf("请输入一个整数:");
        scanf("%d",&a);
        a3=pow(a,3);
        for(i=1;;i=i+2)
        {
                sum=0;
                b=i;
                for(;sum<=a3;i=i+2)
                {
                        sum=sum+i;
                        if(sum==a3)
                        {
                                c=i;
                                break;
                        }
                }
                if(sum==a3)
                {
                        c=i;
                        break;
                }
        }
        printf("%d=",a3);
        for(i=b;i<c;i+=2)
        {
                printf("%d+",i);
        }
        printf("%d",c);
        
        return 0;
}

最佳答案
2022-8-8 22:10:49
内层循环和外层循环的i是一个变量,内层循环i的改变导致外层循环i不是从1连续+2,
输入的整数是3时,内层循环sum=1+3+5+7+9+11=36>27,i=11+2=13,外层循环的i变成了13,就遗漏了从3,5,7,9,11开始的连续奇数
改进:替换内层的循环变量,如下
#include <stdio.h>
#include <math.h>

int main() {
        int a, a3, i, sum, b, c, j;

        printf("请输入一个整数:");
        scanf("%d", &a);
        a3 = pow(a, 3);
        for (i = 1;; i = i + 2) {
                sum = 0;
                b = i;
                j = i;
                for (; sum <= a3; j = j + 2) {
                        sum = sum + j;
                        if (sum == a3) {
                                c = j;
                                break;
                        }
                }
                if (sum == a3) {
                        c = j;
                        break;
                }
        }
        printf("%d=", a3);
        for (i = b; i < c; i += 2) {
                printf("%d+", i);
        }
        printf("%d", c);

        return 0;
}

输入3的结果

输入3的结果

输入4的结果

输入4的结果

问题要求

问题要求

最佳答案

查看完整内容

内层循环和外层循环的i是一个变量,内层循环i的改变导致外层循环i不是从1连续+2, 输入的整数是3时,内层循环sum=1+3+5+7+9+11=36>27,i=11+2=13,外层循环的i变成了13,就遗漏了从3,5,7,9,11开始的连续奇数 改进:替换内层的循环变量,如下
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2022-8-8 22:10:49 | 显示全部楼层    本楼为最佳答案   
内层循环和外层循环的i是一个变量,内层循环i的改变导致外层循环i不是从1连续+2,
输入的整数是3时,内层循环sum=1+3+5+7+9+11=36>27,i=11+2=13,外层循环的i变成了13,就遗漏了从3,5,7,9,11开始的连续奇数
改进:替换内层的循环变量,如下
#include <stdio.h>
#include <math.h>

int main() {
        int a, a3, i, sum, b, c, j;

        printf("请输入一个整数:");
        scanf("%d", &a);
        a3 = pow(a, 3);
        for (i = 1;; i = i + 2) {
                sum = 0;
                b = i;
                j = i;
                for (; sum <= a3; j = j + 2) {
                        sum = sum + j;
                        if (sum == a3) {
                                c = j;
                                break;
                        }
                }
                if (sum == a3) {
                        c = j;
                        break;
                }
        }
        printf("%d=", a3);
        for (i = b; i < c; i += 2) {
                printf("%d+", i);
        }
        printf("%d", c);

        return 0;
}
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2022-8-8 22:24:26 | 显示全部楼层
有一个习惯我觉得您要改一下,不要所有的循环都用i做迭代器,尤其是这种循环套循环的情况。这里的i被改了,那么外层的循环就会从大的数字开始算

评分

参与人数 1荣誉 +5 鱼币 +5 贡献 +3 收起 理由
1148431841 + 5 + 5 + 3

查看全部评分

想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2022-8-8 22:29:20 | 显示全部楼层
本帖最后由 易改乌江水 于 2022-8-8 22:49 编辑

1+3+5+7+9=25
1+3+5+7+9+11=36
这是里面的循环的i做出的变化,也就是说,里面的第一次跑完,i就已经是9了,那么出这个循环的时候i = i+2,下次就是从11算起的,自然错过了7这个数开始算的情况
并且你前面用b将i存了起来,但是,在第一轮循环结束且未找到结果的情况下,你没有把原本的值还回去?
再其次,给个建议,哪怕你有自信这个程序一定能算出结果,但最外层的循环的条件还是要有的
所以逻辑没大错,把里面循环的i改成j就好了呀
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

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

本版积分规则

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

GMT+8, 2024-11-17 03:34

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

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