アルゴリズム 組み合わせ

TopCoder
この記事は約4分で読めます。

重複を認める3組を選ぶ。(重複する組み合わせ)

ex.[1, 2, 3, 5, 10]
▶1,1,1▶1,1,2▶1,1,3▶1,1,5▶1,1,10▶1,2,1▶1,2,2▶1,2,3▶1,2,5▶1,2,10▶1,3,1▶1,3,2▶1,3,3▶1,3,5▶1,3,10▶1,5,1▶1,5,2▶1,5,3▶1,5,5▶1,5,10▶1,10,1▶1,10,2▶1,10,3▶1,10,5▶1,10,10▶2,1,1▶2,1,2▶2,1,3▶2,1,5▶2,1,10▶2,2,1▶2,2,2▶2,2,3▶2,2,5▶2,2,10▶2,3,1▶2,3,2▶2,3,3▶2,3,5▶2,3,10▶2,5,1▶2,5,2▶2,5,3▶2,5,5▶2,5,10▶2,10,1▶2,10,2▶2,10,3▶2,10,5▶2,10,10▶3,1,1▶3,1,2▶3,1,3▶3,1,5▶3,1,10▶3,2,1▶3,2,2▶3,2,3▶3,2,5▶3,2,10▶3,3,1▶3,3,2▶3,3,3▶3,3,5▶3,3,10▶3,5,1▶3,5,2▶3,5,3▶3,5,5▶3,5,10▶3,10,1▶3,10,2▶3,10,3▶3,10,5▶3,10,10▶5,1,1▶5,1,2▶5,1,3▶5,1,5▶5,1,10▶5,2,1▶5,2,2▶5,2,3▶5,2,5▶5,2,10▶5,3,1▶5,3,2▶5,3,3▶5,3,5▶5,3,10▶5,5,1▶5,5,2▶5,5,3▶5,5,5▶5,5,10▶5,10,1▶5,10,2▶5,10,3▶5,10,5▶5,10,10▶10,1,1▶10,1,2▶10,1,3▶10,1,5▶10,1,10▶10,2,1▶10,2,2▶10,2,3▶10,2,5▶10,2,10▶10,3,1▶10,3,2▶10,3,3▶10,3,5▶10,3,10▶10,5,1▶10,5,2▶10,5,3▶10,5,5▶10,5,10▶10,10,1▶10,10,2▶10,10,3▶10,10,5▶10,10,10

[java]
for (int i = 0; i < a.length; i++) {
for (int j = 0; j < a.length; j++) {
for (int k = 0; k < a.length; k++) {
System.out.println(a[i]+","+a[j]+","+a[k]);
}
}
}
[/java]

重複しない3組を選ぶ。(重複しない組み合わせ)

Pointは、i<j<kの範囲でループを回す。

ex.[1, 2, 3, 5, 10]
▶1,2,3▶1,2,5▶1,2,10▶1,3,5▶1,3,10▶1,5,10▶2,3,5▶2,3,10▶2,5,10▶3,5,10

[java]
for (int i = 0; i < a.length; i++) {
for (int j = i+1; j < a.length; j++) {
for (int k = j+1; k < a.length; k++) {
System.out.println(a[i]+","+a[j]+","+a[k]);
}
}
}
[/java]

③4組を選ぶ場合は、for文が4重になる。選ぶ作業が4回!!

ex.[1, 2, 3, 5, 10]
▶1,2,3,5▶1,2,3,10▶1,2,5,10▶1,3,5,10▶2,3,5,10

[java]
for (int i = 0; i < a.length; i++) {
for (int j = i+1; j < a.length; j++) {
for (int k = j+1; k < a.length; k++) {
for (int l = k+1; l < a.length; l++) {
System.out.println(a[i]+","+a[j]+","+a[k]+","+a[l]);
}
}
}
}
[/java]

コメント

タイトルとURLをコピーしました