-1

合計が k (この例では k = 10) に等しい配列内の 4 つの数値を検索するコードの宿題があります。同じ配列要素を複数回使用できます。つまり、配列の 4 つの要素を合計し、合計を値 k と比較し、等しい場合は true を返し、そうでない場合は他の要素に移動します。これまでのところ、コードは配列の 4 つの異なる要素を合計していますが、配列 [2] * 4 == のように、1 つの要素が 4 つの要素の合計で複数回使用されている場合にも機能するように変更する必要があります。 k または配列[0] * 2 + 配列[1] * 2 == k、true を返します。

コード内の「static int[][] esim」は入力例です。たとえば、{1, 2, 3, 4} は true を返します。これは、k = 10 の場合、1 + 2 + 3 + 4 == k であるためです。{4, 3, 1, 5, 5, 6, 6} は、true の場合に false を返します。コードは重複した要素を考慮せず、したがって 2 * 4 + 2 * 1 == k を無視するためです。同様に、2 * 2 + 2 * 3 == k ですが、{2, 3} は true が期待される場合に false を返します。

誰でも私が望むものを達成する方法を教えてもらえますか?

import java.util.Arrays;

public class Etsinta2 {

    public static boolean etsi(int[] tl, int k) {
        Arrays.sort(tl);
        for (int i = 0; i < tl.length; i++) {
            int b = i + 1;
            int c = i + 2;
            int d = tl.length - 1;
            while (b < d) {
                if (tl[i] + tl[b] + tl[c] + tl[d] == k) {
                    return true;
                } else if (tl[i] + tl[b] + tl[c] + tl[d] < k) {
                    b++;
                    c++;
                } else {
                    d--;
                }
            }
        }
        return false;
    }

    static int[][] esim = new int[][]{{5},
        {2, 3},
        {1, 1, 1, 1},
        {1, 2, 3, 4},
        {4, 2, 3, 1},
        {4, 6, 5, 5},
        {6, 4, 5, 5},
        {6, 6, 6, 4},
        {4, 4, 1, 1, 1, 6, 6},
        {9, 1, 1, 1, 1, 5, 6},
        {4, 3, 1, 5, 5, 6, 6}};

    public static void main(String[] args) {
        for (int[] taulu : esim) {
            System.out.println(Arrays.toString(taulu) + " 10 : " + etsi(taulu, 10));
       }
   }
}
4

2 に答える 2

0

要素の合計がkの倍数であるかどうかを確認していますか?もしそうなら、すべての要素を合計して、%(mod)kがゼロであるかどうかを確認できます(つまり、kで割った後の余りはありません)。

編集:さて、私はもう一度質問を読みました、そして、問題は配列から4つの数を見つけて(そして数を複製することは大丈夫です)kに合計することだと思います。

(申し訳ありませんが、この回答を削除しようとしましたが、簡単には削除できませんでした)

したがって、解決策のスイングは次のとおりです。「番号スロット」ごとに1つずつ、4つのネストされたループがあります。各ループが配列から一度に1つの番号を選択するようにします(したがって、重複した選択が可能になります)。最も内側のループの合計を確認します。kの場合、w/を壊しtrueます。最後に真でない場合は、false

于 2013-03-18T10:50:55.157 に答える