鱼C论坛

 找回密码
 立即注册
查看: 2256|回复: 9

[已解决]S1E21尼科彻斯定理,新手求助!

[复制链接]
发表于 2022-9-7 21:14:17 | 显示全部楼层 |阅读模式

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

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

x
#include <stdio.h>

int main()
{
        int i, j, n, cubed, sum = 0;

        printf("请输入一个整数:");
        scanf("%d", &n);

        cubed = n * n * n;

       for (i = 1; i < cubed; i += 2)
        {
                for (j = i; j < cubed; j += 2)
                {
                        sum += j;
                        if (sum == cubed)
                        {
                                if (j - i > 4)
                                {
                                        printf("%d = %d + %d ... + %d\n", cubed, i, i+2, j);
                                }
                                else
                                {
                                        printf("%d = %d + %d + %d\n", cubed, i, i+2, i+4);
                                }

                                goto FINDIT;
                        }

                        if (sum > cubed)
                        {
                                sum = 0;
                                break;
                        }
                }
        }

FINDIT:

        return 0;
}

红区不懂
(1)为什么用循环的嵌套
(2)j-i>4
  (3)printf("%d = %d + %d ... + %d\n", cubed, i, i+2, j);
      printf("%d = %d + %d + %d\n", cubed, i, i+2, i+4);
最佳答案
2022-9-7 22:30:00
本帖最后由 额外减小 于 2022-9-7 22:38 编辑

先看尼。。。定理的内容:大于3的整数的3次方可表示为一串连续奇数的和

for (i = 1; i < cubed; i += 2) 第一个循环的目的:遍历所有的奇数,i作为数列的起始数
for (j = i; j < cubed; j += 2)第2个循环的目的:测试当i作为起始数时可否满足尼..定理。
例如
3^3=27,1+3=4,1+3+5=9,...,1+3+...+7=16,1+...+9=25,1+...+11=36,超过了27,舍去,i换成3继续试数
就这样一直换一直换,直到i=7,
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

 楼主| 发表于 2022-9-7 21:44:04 | 显示全部楼层
附上题目:
1. 验证尼科彻斯定理:任何一个大于 2 的整数的立方都可以表示成一串连续奇数的和,这些奇数一定是要连续的(比如 3^3 == 7 + 9 + 11)。
要求:用户输入某个整数,验证该数是否符合尼科彻斯定理,并将对应的式子打印出来

                               
登录/注册后可看大图
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2022-9-7 21:50:16 | 显示全部楼层
https://fishc.com.cn/thread-71653-1-1.html
实在不知如何附上图片,只能先将链接贴上。本题是动动手第一题,麻烦鱼油了!
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2022-9-7 22:30:00 | 显示全部楼层    本楼为最佳答案   
本帖最后由 额外减小 于 2022-9-7 22:38 编辑

先看尼。。。定理的内容:大于3的整数的3次方可表示为一串连续奇数的和

for (i = 1; i < cubed; i += 2) 第一个循环的目的:遍历所有的奇数,i作为数列的起始数
for (j = i; j < cubed; j += 2)第2个循环的目的:测试当i作为起始数时可否满足尼..定理。
例如
3^3=27,1+3=4,1+3+5=9,...,1+3+...+7=16,1+...+9=25,1+...+11=36,超过了27,舍去,i换成3继续试数
就这样一直换一直换,直到i=7,
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2022-9-8 09:12:37 | 显示全部楼层
本帖最后由 jhq999 于 2022-9-8 09:16 编辑
    int i,a,n=6,sum=0;
    a=n*n-n+1;////连续奇数的第一个
    for(i=1;i<n;i+=1,a+=2)////从1到n-1个连续奇数
    {
        printf("%d+",a);
        sum+=a;
    }
    printf("%d=%d",a,sum+a);/////a是第n个奇数,sum是n-1的连续奇数和
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2022-9-8 10:08:59 | 显示全部楼层
额外减小 发表于 2022-9-7 22:30
先看尼。。。定理的内容:大于3的整数的3次方可表示为一串连续奇数的和

for (i = 1; i < cubed; i += 2) ...

恍然大悟!这就是一个枚举嘛!谢谢鱼油
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2022-9-8 10:46:14 | 显示全部楼层

我看不懂你这个,还是多谢鱼油了抽空回帖
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2022-9-8 11:16:27 | 显示全部楼层
Saito77 发表于 2022-9-8 10:46
我看不懂你这个,还是多谢鱼油了抽空回帖。

n*n-n+1+0+n*n-n+1+2+……+n*n-n+1+2(n-1)=n*n^2-n^2+n+(0+2+……+2(n-1))
=n*n^2-n^2+n+((0+2n-2)*n/2)=n^3
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2022-9-8 23:00:07 | 显示全部楼层
额。。。昨晚忘记回答你的2,3两个问题了,不知您想明白没有,
所以我再补充一句
这两句代码应该是确定结果的输出形式
如果j-i>4,也就是末项与首项的差值要大于4,等价于这个数列项数大于3,所以就要用省略号
如果其他情况下。那么就是项数要少于3,那就没必要用省略号了


谢谢您给的的最佳答案
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2022-9-9 10:07:12 | 显示全部楼层
额外减小 发表于 2022-9-8 23:00
额。。。昨晚忘记回答你的2,3两个问题了,不知您想明白没有,
所以我再补充一句
这两句代码应该是确定结 ...

嗯,有想明白

评分

参与人数 1鱼币 +1 收起 理由
额外减小 + 1 那就好

查看全部评分

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

使用道具 举报

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

本版积分规则

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

GMT+8, 2024-11-16 21:22

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

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