な、何と...Javaには組み合わせを処理してくれるような標準ライブラリが無いんだそうな...どうもボクです。
⇧ 上記サイト様によりますと、外部APIの「Apache Common」を使えばイケるらしい。
⇧ 上記サイト様によりますと、
の3つの外部APIのいずれかでコンビネーションが実現できると。
Rubyなんかだと、
⇧ 上記サイト様によりますと、標準で用意してくれているようです。
組み合わせを考えてみる
お馴染みの、
⇧ 上記サイト様の問題です。
そんでは、Eclipseを起動し、適当なJavaプロジェクト、クラスを作成。
んで、ソースコードはこんな感じで。
TestCombination.java
package aizu; import java.io.BufferedReader; import java.io.IOException; import java.io.InputStreamReader; import java.util.ArrayList; import java.util.Arrays; import java.util.HashMap; import java.util.List; import java.util.Map; public class TestCombination { public static void main(String[] args) { // TODO 自動生成されたメソッド・スタブ BufferedReader br = new BufferedReader(new InputStreamReader(System.in)); List<Map<Integer, List<Integer>>> list = new ArrayList<>(); int mapKey = 0; while (true) { Map<Integer, List<Integer>> combination = new HashMap<>(); try { String[] condition = br.readLine().split("\\s"); int n = Integer.parseInt(condition[0]); int x = Integer.parseInt(condition[1]); // 入力値が、「0 0」の場合 if (n == 0 && x == 0) { break; // ループ処理を抜ける } for (int i = 1; i <= n - 2; i++) { for (int j = i + 1; j <= n - 1; j++) { for (int k = j + 1; k <= n; k++) { if ((x == (i + j + k))) { // 組み合わせをマップに保存 combination.put(mapKey, Arrays.asList(i, j, k)); mapKey++; } } } } // 組み合わせのマップをリストに保存 list.add(combination); } catch (NumberFormatException e) { // TODO 自動生成された catch ブロック e.printStackTrace(); } catch (IOException e) { // TODO 自動生成された catch ブロック e.printStackTrace(); } } // 結果を出力 list.stream().forEach(map -> { System.out.println(map.size()); }); } }
んでは、実行。
入力値は、
ということで、
できました~。
まぁ、しかし、これ、3つの数字の組み合わせだから、3重ループとかで何とか済んでるけど、もし100つの数字の組み合わせとかってなったらどうすれば良いんでしょうね...
とりあえず、AIZU ONLINE JUDGEの練習問題は完了だ~、
と思いきや、
なんか、「Algorithms and Data Structures I」「Introduction to Programming II」って枠があるようですね...終わりが見えないっす(涙)
今回はこのへんで。