合計が 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));
}
}
}