S1E21尼科彻斯定理,新手求助!
#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); 附上题目:
1. 验证尼科彻斯定理:任何一个大于 2 的整数的立方都可以表示成一串连续奇数的和,这些奇数一定是要连续的(比如 3^3 == 7 + 9 + 11)。
要求:用户输入某个整数,验证该数是否符合尼科彻斯定理,并将对应的式子打印出来微信图片_20220907214332 https://fishc.com.cn/thread-71653-1-1.html
实在不知如何附上图片,只能先将链接贴上。本题是动动手第一题,麻烦鱼油了!{:10_257:} 本帖最后由 额外减小 于 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, 本帖最后由 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的连续奇数和 额外减小 发表于 2022-9-7 22:30
先看尼。。。定理的内容:大于3的整数的3次方可表示为一串连续奇数的和
for (i = 1; i < cubed; i += 2) ...
恍然大悟!这就是一个枚举嘛!谢谢鱼油{:10_298:} jhq999 发表于 2022-9-8 09:12
我看不懂你这个{:10_266:},还是多谢鱼油了抽空回帖{:10_297:}。 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 额。。。昨晚忘记回答你的2,3两个问题了,不知您想明白没有,
所以我再补充一句
这两句代码应该是确定结果的输出形式
如果j-i>4,也就是末项与首项的差值要大于4,等价于这个数列项数大于3,所以就要用省略号
如果其他情况下。那么就是项数要少于3,那就没必要用省略号了{:10_256:}
谢谢您给的的最佳答案
额外减小 发表于 2022-9-8 23:00
额。。。昨晚忘记回答你的2,3两个问题了,不知您想明白没有,
所以我再补充一句
这两句代码应该是确定结 ...
嗯,有想明白{:10_298:}
页:
[1]