主题:“Nicomachus”定理问题
96131
[专家分:0] 发布于 2006-04-27 16:57:00
“Nicomachus”定理
Nicomachus定理:任何一个整数的立方都可以表示成一串连续的奇数的和。
你的任务是证明这个定理是正确的。对输入的每个正整数N (1<=N<=100)
都能用该定理证明正确
回复列表 (共12个回复)
沙发
96131 [专家分:0] 发布于 2006-04-27 17:06:00
var n,a,b,c,x,s:integer;
y:array[1..10] of integer;
begin
write('n=');
readln(n);
a:=n*n*n;
for b:=1 to a do
begin
s:=0;c:=0;b:=0;
repeat
if odd(b) then
begin
c:=c+1;
b:=b+2;
y[c]:=b;
s:=s+b
end;
until a=s or;
end;
for x:=1 to c do
write(y[x],' ':2);
readln;
end.
板凳
96131 [专家分:0] 发布于 2006-04-27 17:07:00
上面是我的程序,不是为啥总不行,谁能编一道让我学习,万分感谢
3 楼
96131 [专家分:0] 发布于 2006-04-29 10:43:00
没人帮忙吗?
4 楼
scyangbo [专家分:360] 发布于 2006-04-29 16:49:00
一连串奇数?
如果只有一个可以吗?
5 楼
贺天行宝 [专家分:2300] 发布于 2006-04-29 20:35:00
until a=s or;
这个or是什么意思?不懂
还有,如果无视这个or,你的程序似乎那个“一连串奇数”必须从1开始,这不一定把。
应该把所有可能的开头都枚举一下
6 楼
贺天行宝 [专家分:2300] 发布于 2006-04-29 20:45:00
对不起,我没看清楚。刚才第二个问题请无视
问题还是出在until如果没有or,那么一旦所枚举的开头不是答案的话,程序会一直运行下去的,加个边界条件便可
还有明明b是循环变量,怎么出现b:=0;?!
变量最好用longint,100的立方的话,就超了integer了
var
i,j,k,l,m,n:longint;
s:array[1..100]of longint;
begin
readln(m);
n:=m*m*m;
for i:=1 to n do
begin
j:=i;m:=0;k:=0;
if not odd(j) then continue;
while m<n do
begin
m:=m+j;inc(k);s[k]:=j;inc(j,2);
end;
if m=n then begin
for i:=1 to k do
write(s[i],' ');
writeln;
exit;
end;
end;
end.
7 楼
贺天行宝 [专家分:2300] 发布于 2006-04-29 20:45:00
until a=s or;
这个or是什么意思?不懂
告诉我啊
8 楼
96131 [专家分:0] 发布于 2006-04-30 10:51:00
不好意思or 是原来后面还有个条件的,就是“或者”的意思,应为我改得太多了连自己都搞不清程序了,真抱歉
9 楼
贺天行宝 [专家分:2300] 发布于 2006-04-30 18:03:00
哦
10 楼
amyhab [专家分:120] 发布于 2006-10-16 20:54:00
(x为最小奇数)
x=n*n-n+1[em1][em2]
我来回复