定义一个数组,二维.假设是aw,aw[i][j]分别表示数字的上限(i)和下限(j),i长度未知.j=0和1.
bw是一个一维数组.bw[i]=aw[i][0]里的i是对应的;
现在要实现这样一个算法,就是每当数组bw[i]=aw[i][j]的上限时候就向前一个单元进位,也就是bw[i-1]:=bw[i-1]+1;当产生进位之后,原来的bw[i]:=aw[i][1];
这样一直循环直到bw[0]=aw[0][0];
我写了个算法,但是无法判断新进位后产生的第2次进位,说白了也就是递归没写好.
比如1 1 5 5,这时最后一个5产生进位(不包含0),
就应当是1 2 1 1,而我的算法就是1 1 6 1,问题就在这.再运算一次,产生进位,但是就无法产生1 2 1 1,而是1 2 1 2了.
我现在脑袋是晕的..请帮我一下..谢谢谢谢!所有的分数相送.举个例子:
假如aw[0][0]:=14,aw[0][1]:=3,aw[1][0]:=15,aw[1][1]:=2
那么每次bw[1]=15的时候就向前进一位,步骤:bw[1]:=2,每次+1,当aw[1][0]=15的时候,进位,bw[0]=3,然后bw[1]:=2;再加一....一直循环到bw[0]=14.就跳出循环..就是这个意思..
bw是一个一维数组.bw[i]=aw[i][0]里的i是对应的;
现在要实现这样一个算法,就是每当数组bw[i]=aw[i][j]的上限时候就向前一个单元进位,也就是bw[i-1]:=bw[i-1]+1;当产生进位之后,原来的bw[i]:=aw[i][1];
这样一直循环直到bw[0]=aw[0][0];
我写了个算法,但是无法判断新进位后产生的第2次进位,说白了也就是递归没写好.
比如1 1 5 5,这时最后一个5产生进位(不包含0),
就应当是1 2 1 1,而我的算法就是1 1 6 1,问题就在这.再运算一次,产生进位,但是就无法产生1 2 1 1,而是1 2 1 2了.
我现在脑袋是晕的..请帮我一下..谢谢谢谢!所有的分数相送.举个例子:
假如aw[0][0]:=14,aw[0][1]:=3,aw[1][0]:=15,aw[1][1]:=2
那么每次bw[1]=15的时候就向前进一位,步骤:bw[1]:=2,每次+1,当aw[1][0]=15的时候,进位,bw[0]=3,然后bw[1]:=2;再加一....一直循环到bw[0]=14.就跳出循环..就是这个意思..
const maxn=1; //这个是数组最大的长度
var aw:array[0..maxn,0..maxn] of integer;
bw:array[0..maxn] of integer;
i,j,g,s,k:integer;
begin
aw[0][0]:=14;aw[0][1]:=3;aw[1][0]:=15;aw[1][1]:=2;
for i:=0 to maxn do
begin
bw[i]:=aw[i][0];
end;j:=maxn;
while (bw[0]<=aw[0][0]) do begin
g:=0;s:=0;
for k:=j downto 0 do
begin
if k=j then s:=s+bw[k]+1+g else s:=s+g;
g:=s div aw[k][0];
bw[k]:=s mod aw[k][0];
end;
end;
end;
//aw:那个一维数组,CW和dW,分别是数组元素的上限和下限.
while aw[0]<>n-m+1 do//N-M+1是自定义的一个数字.
begin k:=m-1; aw[x]:=aw[x]+1; while k<>0 do
begin
if aw[k]>cw[k] then
begin
aw[k-1]:=aw[k-1]+1;
aw[k]:=dw[k];
end ; k:=k-1;
end;
begin k:=m-1; aw[x]:=aw[x]+1; //数组的最后一位,下标为X,每次+1, while k <> 0 do //AW的下标,从K到0循环的过程.,
begin
if aw[k]> cw[k] then //CW[K] 表示进位的上限
begin
aw[k-1]:=aw[k-1]+1;
aw[k]:=dw[k]; //将AW产生进位的[K]置为下限.
end ; k:=k-1;
end;
end;