2

次のサンプルのように、入力配列の要素が昇順で配置されているとします。

int[] a= {23,24,25,30,34,36,40,41,43,45,50};

配列を異なるサブ配列に分割する必要があります。各サブ配列には、合計が 100 以下になるような要素が含まれます。

上記の入力の場合、私の出力は次のようになります。

b1[]= {23,24,25};

b2[]= {30,34,36};

b3[]= {40,41};

b4[]= {43,45};

b5[]= {50};

入力配列の要素の値と数は異なる場合があります。

私はJavaが初めてで、完全に立ち往生しています。続行する方法を提案してください。

4

2 に答える 2

1

これを行う方法についていくつかのアイデアを提供し、コーディングはあなたに任せます。実装の特定の部分に問題がある場合は、お気軽にお問い合わせください。

ここで最初に行う必要があるのは、サブ配列を格納する場所を作成することです。最終的にサブ配列がいくつになるか分からないので、 のような動的なものListが良い選択ですが、それらについてまだ学んでいない場合は、大きな配列でも仕事をすることができます.

大きな配列の長さはどれくらいですか? 各サブアレイは 100 より小さいですよね? 入力のすべての要素を合計し、100 で除算して推定値を得ることができます。

初期設定が完了したら、入力配列をサブ配列に分割する方法を理解する必要があります。サブ配列のルールは「100 未満」であることはわかっているので、何らかの追加を行う必要があります。

入力要素を 1 つずつ見ていきます。それらのそれぞれは、最終的にサブ配列になる必要があります。唯一の問題は、いつ 1 つのサブアレイを停止して次のサブアレイを開始するかです。したがって、次の入力番号を追加するとサブ配列の合計が 100 を超える場合は、現在のサブ配列を大きな配列に格納し、その入力を新しいサブ配列に入れます。

もちろん、以前に足した数を足し合わせるのは時間の無駄です。現在のサブ配列の合計を格納するために別の変数を側に保持できるため、入力ごとに現在のサブ配列のすべての要素を追加する必要はありません。新しいサブアレイを作成するときは、その変数を 0 にリセットすることを忘れないでください!

最後に、サブ配列または大きな配列でスペースが不足する可能性があります。その場合は、2 倍の大きさの新しいものを作成し、現在の値をコピーしてください。

于 2012-10-05T21:21:01.503 に答える
1

数字の順序が重要な場合は、次のように記述できます (このコードは太陽配列を出力するだけです)。

int sum = 0;
for(int i=0;i<a.length;i++){
   if(sum + a[i] <= 100){
       sum += a[i];
       System.out.print(a[i]+" ");
   }else{
       sum = 0;
       System.out.println("");
   }
}
于 2012-10-05T20:11:25.413 に答える