鱼C论坛

 找回密码
 立即注册
查看: 93|回复: 2

[已解决]用户输入某个整数,验证该数是否符合尼科彻斯定理,并将对应的式子打印出来

[复制链接]
发表于 2025-2-7 10:30:27 | 显示全部楼层 |阅读模式

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

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

x
我看了半天,不知道我的代码哪里出现了问题 求大佬帮忙瞅瞅
#include <stdio.h>

int main ()
{
        int a ,i ,j ,count ,sum = 0 ,k = 3;
        int c[100][5];//用于存放式子 
        char b;//用于判断是否打印式子 
        
        printf("请输入一个整数:");
        scanf("%d" ,&a);//用户输入表示范围的最大值a 
        
        while(k <= a)
        {
                count = k * k * k;
                
                for (i = 1 ;i < count ;i += 2)
                {
                        for (j = i ;j < count ;j += 2)
                        {
                                sum += j;
                                if (sum == count)
                                {
                                        if(j - i <= 4)
                                        {
                                                c[k - 3][0] = k;
                                                c[k - 3][1] = count;
                                                c[k - 3][2] = i;
                                                c[k - 3][3] = i + 2;
                                                c[k - 3][4] = i + 4;
                                        }
                                        
                                        else
                                        {
                                                c[k - 3][0] = k;
                                                c[k - 3][1] = count;
                                                c[k - 3][2] = i;
                                                c[k - 3][3] = i + 2;
                                                c[k - 3][4] = j;
                                        }
                                }
                                
                                if (sum > count)
                                {
                                        sum = 0;
                                        break;
                                }
                        }
                }
                
                k++;
        }
        
        printf("经验证,3 ~ 100 之间所有的整数均符合尼科彻斯定理!\n");
        printf("是否打印所有式子(y/n):");
        
        getchar ();
        scanf("%c" ,&b);
        if(b == 'y')
        {
                for(k = 3 ;k <= a ;k++ )//打印式子 
                {
                        if(c[k - 3][4] - c[k - 3][3] == 2)
                        {
                                printf("%d^3 == %d == %d + %d + %d\n" ,c[k - 3][0] ,c[k - 3][1] ,c[k - 3][2] ,c[k - 3][3] ,c[k - 3][4]);
                        }
                        if(c[k - 3][4] - c[k - 3][3] > 2)
                        {
                                printf("%d^3 == %d == %d + %d +... + %d\n" ,c[k - 3][0] ,c[k - 3][1] ,c[k - 3][2] ,c[k - 3][3] ,c[k - 3][4]);
                        }
                }
                
                return 0;
        }
        
        if(b == 'n')
        {
                return 0;
        }
}
最佳答案
2025-2-7 10:59:41
#include <stdio.h>
#include <stdlib.h>

int main() {
    int a, i, j, count, sum = 0;
    int number = 3; // 当前验证的数字
    int results[100][5]; // 存储验证结果
    char print; // 用户是否打印结果

    printf("请输入一个整数:");
    scanf("%d", &a); // 用户输入范围的最大值

    while (number <= a) {
        count = number * number * number; // 计算立方
        sum = 0;

        for (i = 1; i < count; i += 2) {
            sum = 0;
            for (j = i; j < count; j += 2) {
                sum += j;
                if (sum == count) {
                    // 存储结果
                    results[number - 3][0] = number;
                    results[number - 3][1] = count;
                    results[number - 3][2] = i;
                    results[number - 3][3] = i + 2;
                    results[number - 3][4] = j;
                    break;
                } else if (sum > count) {
                    break;
                }
            }
        }

        number++;
    }

    printf("经验证,3 ~ %d 之间所有的整数均符合尼科彻斯定理!\n", a);
    printf("是否打印所有式子(y/n): ");
    scanf(" %c", &print); // 注意前面的空格,跳过空白字符

    if (print == 'y') {
        for (number = 3; number <= a; number++) {
            printf("%d^3 == %d == %d + %d + ... + %d\n",
                   results[number - 3][0],
                   results[number - 3][1],
                   results[number - 3][2],
                   results[number - 3][3],
                   results[number - 3][4]);
        }
    } else if (print != 'n') {
        printf("无效输入,程序退出。\n");
    }

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

使用道具 举报

发表于 2025-2-7 10:30:36 | 显示全部楼层
当然可以,我来帮你看看代码问题。首先,尼科彻斯定理公式为 n^3 = n 个连续奇数的和。我们可以编写一个程序来验证并打印相应的式子。

下面是一个完整的代码示例:
#include <stdio.h>

int main() {
    int a, i, j, count, sum, start;
    
    printf("请输入一个整数:");
    scanf("%d", &a);//用户输入表示范围的最大值a

    for (i = 1; i <= a; i++) {
        sum = 0;
        start = i * i - i + 1; // 计算起始奇数
        printf("%d^3 = ", i);
        for (j = 0; j < i; j++) {
            sum += start;
            if (j > 0) {
                printf(" + ");
            }
            printf("%d", start);
            start += 2;
        }
        printf(" = %d\n", sum);
    }

    return 0;
}

该代码逻辑如下:
  • 输入一个整数 `a`。
  • 使用双重循环,外层循环遍历从 1 到 `a` 的所有整数,内层循环生成连续奇数并求和。
  • 根据尼科彻斯定理,计算每个数字的立方和值,并输出相应的式子。


这段代码会验证并打印每个整数是否符合尼科彻斯定理,并显示对应的式子。希望对你有帮助!如果仍有问题,请随时告诉我。

以上回复来自 FishC AI 小助理,如未能正确解答您的问题,请继续追问。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2025-2-7 10:59:41 | 显示全部楼层    本楼为最佳答案   
#include <stdio.h>
#include <stdlib.h>

int main() {
    int a, i, j, count, sum = 0;
    int number = 3; // 当前验证的数字
    int results[100][5]; // 存储验证结果
    char print; // 用户是否打印结果

    printf("请输入一个整数:");
    scanf("%d", &a); // 用户输入范围的最大值

    while (number <= a) {
        count = number * number * number; // 计算立方
        sum = 0;

        for (i = 1; i < count; i += 2) {
            sum = 0;
            for (j = i; j < count; j += 2) {
                sum += j;
                if (sum == count) {
                    // 存储结果
                    results[number - 3][0] = number;
                    results[number - 3][1] = count;
                    results[number - 3][2] = i;
                    results[number - 3][3] = i + 2;
                    results[number - 3][4] = j;
                    break;
                } else if (sum > count) {
                    break;
                }
            }
        }

        number++;
    }

    printf("经验证,3 ~ %d 之间所有的整数均符合尼科彻斯定理!\n", a);
    printf("是否打印所有式子(y/n): ");
    scanf(" %c", &print); // 注意前面的空格,跳过空白字符

    if (print == 'y') {
        for (number = 3; number <= a; number++) {
            printf("%d^3 == %d == %d + %d + ... + %d\n",
                   results[number - 3][0],
                   results[number - 3][1],
                   results[number - 3][2],
                   results[number - 3][3],
                   results[number - 3][4]);
        }
    } else if (print != 'n') {
        printf("无效输入,程序退出。\n");
    }

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

使用道具 举报

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

本版积分规则

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

GMT+8, 2025-2-19 14:51

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

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