2

では、数 a の因数を見つけたいとします。forループとarraylistを使用して、それを行う方法を知っています。私の問題は、(そして、これについてどうすればよいかわかりません)係数をペアにしたいということです(元の数を得るために一緒に乗算します)。それぞれが2つの変数を持つ複数の配列リストで係数を取得できると思います。 . しかし、異なる数には異なる数の因数があるため、これは非常に扱いにくいものです。(言うまでもなく、私はこれを行う方法を知りません..)

この後、これらの変数を方程式でテストして、それらを絞り込みたいと思います。これらのペアの合計が特定の数になると、使用したいペアになります。私はチュートリアルを使用してこれらすべてを実行する方法を理解しようとしていますが、私は Java にやや慣れていないため、完全に迷っています。

助けてくれてありがとう:-)

4

4 に答える 4

3

ペアの両側にフィールドを持つ独自のクラスを作成することもできますが、Map<Integer, Integer>. 基本的な実装は次のようになります。

private static Map<Integer, Integer> factorize(int number) {
    Map<Integer, Integer> factors = new HashMap<Integer, Integer>();
    for (int i = 1; i < Math.sqrt(number); i++) {
        if (number % i == 0)
            factors.put(i, number / i);
    }
    return factors;
}

これがどのように呼び出され、結果がどうなるかを示すテストコードを次に示します。

public static void main(String[] args) {
    Map<Integer, Integer> factorPairs = factorize(12345);
    for (Map.Entry<Integer, Integer> factor : factorPairs.entrySet())
        System.out.println(factor.getKey() + " x " + factor.getValue());
}

出力:

1 x 12345
3 x 4115
5 x 2469
15 x 823

それはあなたが始めるのに十分なはずです

于 2011-12-30T03:42:43.117 に答える
0

数値 x の約数が必要だとします。

y = √x とする

次に、1 から y までループして因数を見つけます。

番号が 218 だとします。Java のことはよく覚えていないので、Java の疑似コードを書きます。

int x = 218;
int y = Math.sqrt(218); // 14
for(int i = 1; i <= y; i++){
     if i is a factor of x
     Add it to the list
}
// Your list will now be: 1, 2

リスト内の各要素と対になる係数は、単に x をその要素で割ったものです。

したがって、1 のペアリング係数は 218/1 = 218 であり、2 のペアリング係数は 218/2 = 109 です。

于 2011-12-30T03:45:21.970 に答える
0

整数のリストのリストを使用して、次のようなことを試してください。

import java.util.*;
public class Main {
    static List<Integer> findListThatSumsTo10(List<List<Integer>> list) {
        for (List<Integer> l : list) {
            int sum = 0;
            for (Integer i : l)
                sum += i;
            if (sum == 10) return l;
        }
        return null;
    }
    public static void main(String[] args) {
        List<List<Integer>> list = new LinkedList<List<Integer>>();
        Integer[] factorsOf15 = { 3, 5 };
        Integer[] factorsOf30 = { 2, 3, 5 };
        list.add(Arrays.asList(factorsOf15));
        list.add(Arrays.asList(factorsOf30));
        System.out.println(list);
        System.out.println(findListThatSumsTo10(list));
    }
}
于 2011-12-30T03:51:15.803 に答える
0

ペアを保存する必要はありません。

それNがあなたの元の数であり、F1F2が要因のペアであるとしましょう。すなわちN = F1 x F2

それが既知であることを考えるとN、保存する必要があるのはF1s だけです。s は、F2次を使用して簡単に再計算できます。

    int f2 = n / f1;
于 2011-12-30T04:14:46.520 に答える