求算法“任何一个自然数的立方都可以写成一串连续奇数之和”(100)

  • 主题发起人 主题发起人 husang
  • 开始时间 开始时间
H

husang

Unregistered / Unconfirmed
GUEST, unregistred user!
1^3=12^3=3+5=83^3=7+9+11=274^3=13+15+17+19=64
 
问功课吗?
 
想用递推算法来编写该程序!!请教各位大虾!!![:D]
 
做功课才那点分,老师教你的东西哪里去了?
 
简单算法:  N的3次方,那结果是N个奇数相加。  如果N是奇数,那结果中间的一个是N的2次方,结果大致是:      ……N*N-4,N*N-2,N*N,N*N+2,N*N+4……  如果N是偶数,那结果中大致是:      ……N*N-3,N*N-1,N*N+1,N*N+3……  所以,只需要根据N的内容就可以直接生成结果,不需要递归什么的算法了。
 
参照楼上的思路function n3ToSum(n:Cardinal):string;var n2,index,nm:Cardinal
a:array of Cardinal
s:string
i:integer;begin result:=''
if n=0 then exit
SetLength(a,n)
n2:=n*n
try if n mod 2<>0 then begin index:=(n-1) div 2
a[index]:=n2
end else begin index:=n div 2-1
n2:=n2-1
a[index]:=n2
end
nm:=n2-2
for i:=index-1 downto 0 do begin a:=nm
dec(nm,2)
end
nm:=n2+2
for i:=index+1 to n-1 do begin a:=nm
inc(nm,2)
end
for n2:=n-1 downto 0 do s:=inttostr(a[n2])+'+'+s
finally SetLength(a,0)
end
Delete(s,length(s),1)
result:=s;end;procedure TForm1.Button1Click(Sender: TObject);begin edit2.Text:=n3ToSum(StrToInt(edit1.Text));end;
 
n:=strtoint(edit1.text)
Q:=0
for i:=1 to n do begin m:=n*(n-1) div 2
Q:=Q+2*m+(2*i-1)
end
ShowMessage(IntToStr(q));
 
这个是很容易证明的任何一个自然数n的立方,等于从n*(n-1)开始连续n个奇数之和。
 
to xiangsni:你的结果不就是n*n*n吗.to zhukewen:应该是:任何一个自然数n的立方,等于从n*(n-1)+1开始连续n个奇数之和,用这个公式是最简单的
 
结果大家都知道,看步骤
 
to wangdonghaim:=n*(n-1) div 2N3=(2*m+1)+(2*m+3)+(2*m+5)+....+(2*m+(2N-1));
 
后退
顶部