回 帖 发 新 帖 刷新版面

主题:“Nicomachus”定理问题

“Nicomachus”定理
Nicomachus定理:任何一个整数的立方都可以表示成一串连续的奇数的和。
你的任务是证明这个定理是正确的。对输入的每个正整数N (1<=N<=100)
都能用该定理证明正确

回复列表 (共12个回复)

沙发

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.

板凳

上面是我的程序,不是为啥总不行,谁能编一道让我学习,万分感谢

3 楼

没人帮忙吗?

4 楼

一连串奇数?
如果只有一个可以吗?

5 楼

until a=s or;
这个or是什么意思?不懂
还有,如果无视这个or,你的程序似乎那个“一连串奇数”必须从1开始,这不一定把。
应该把所有可能的开头都枚举一下

6 楼

对不起,我没看清楚。刚才第二个问题请无视
问题还是出在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 楼

until a=s or;
这个or是什么意思?不懂 
告诉我啊

8 楼

不好意思or 是原来后面还有个条件的,就是“或者”的意思,应为我改得太多了连自己都搞不清程序了,真抱歉

9 楼

10 楼


(x为最小奇数)
x=n*n-n+1[em1][em2]

我来回复

您尚未登录,请登录后再回复。点此登录或注册