0

ジャバの質問があります。

と の 2 つのint[]配列がcdnありcmnます。upto の連続する整数を加算し、加算に使用された整数の数を返すプログラム
cdnが必要{1,1,1,1,1,1,2,1,1,1,1,1,1,2,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1}
cmnです。次に、uptoの次の整数から加算を続け、整数の数を返します。上記の配列の場合、これは 3 回実行されます。最初の戻り値は 7、2 回目は 7、3 回目は 16 です。整数の数は と で収集できます。私が持っているコードは次のとおりです。{8,8,16}
cdn[]cmn[init]cdn[]cmn[init+1]int[]{7,7,16}

int numofints = 0;
int init = 0;
int plus = 0;
while(init < m2){
 for(int j = 0; j < cdn.length; j++){
    plus += cdn[j];
    numofints++;
  if(plus == cmn[init]){
   init++;
  }
 }
}
System.out.print(numofints);

m2のサイズでcmn、この場合は 3 です。cdn私のプログラムは最初から何度もループし始めることに注意してくださいj = 0. 前回終わったところから始めたい!私はあなたが私のための解決策を持っていることを願っています.

ビョルン

4

2 に答える 2

2

外側のループから引き出して、内側のループに, の代わりに,jを使用するだけですwhilefor

plus = 0また、ループに入れる必要があります

public class T {
  public static void main(String[] args) {
    int[] cdn = {1,1,1,1,1,1,2,1,1,1,1,1,1,2,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1};
    int[] cmn = {8,8,16};

    int numofints = 0;
    int init = 0;
    int m2 = 3;

    int j = 0;
    while(init < m2){
     int plus = 0;
     while(j < cdn.length){
        plus += cdn[j];
        j++;
        numofints++;
        if(plus == cmn[init]){
          init++;
          System.out.println(j);
          break;
        } 
      }
    if (j == cdn.length) break;
    }
  }
}
于 2013-03-13T22:14:15.920 に答える
0

しませif(plus == cmn[init]){if(plus >= cmn[init])か?cdnを変更しても、「plus」がたまたま「cmn [init]」を超えると、コードが壊れてしまいます。

于 2013-03-13T22:36:40.390 に答える