定义一个数组,二维.假设是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.就跳出循环..就是这个意思..

解决方案 »

  1.   

    看得很晕很晕很晕很晕,最后还是不懂,凭直觉领悟了一下,然后大概的写了一下你那个例子,如果是这个意思你改一下看看
    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;
      

  2.   

    谢谢楼上的诸位,已经解决!!散分,附代码.
    //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;
      

  3.   

    原来的问题从数组的0循环到N,现在把循环改成从N到0即可.如上面的K:=K-1,即为从数组下标最后一位每次-1.一直到0.
      

  4.   

    while   aw[0] <> n-m+1   do//N-M+1是自定义的一个数字. 
      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;