challenge 自然数の分割

自然数nとm(n>=m>0)が与えられたとき,nをm個の非負の整数の和で表すやり方を全て出力してください.
その際,和の組(x_1, ..., x_m)は大きい順に出力してください.
ここでm = 3の時の「(a, b, c)が(A, B, C)より大きい」とは
(a > A)
(a == A) かつ (b > B)
(a == A) かつ (b == B) かつ (c > C)
のいずれかが成り立つとき(つまりは辞書的順序)とします.

例:n = 5, m = 3が与えられたときは
5, 0, 0,
4, 1, 0,
4, 0, 1,
3, 2, 0,
3, 1, 1,
...
0, 1, 4,
0, 0, 5,
を出力する.

Posted feedbacks - diff

う。根本的に間違えてた。 「組み合わせ」じゃなくて、「順列」なのね。 はじめからソートは要らなかったorz

何度もすみません。最初のコードとのdiffで

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
@@ -23,3 +23,3 @@
         if(m <= 2) {
-            for (int i = 0; i <= n/2; i++) {
+            for (int i = 0; i <= n; i++) {
                 answer.set.add(new int[]{i, n-i});
@@ -27,3 +27,3 @@
         } else {
-            for (int i = 0; i <= n/m; i++) {
+            for (int i = 0; i <= n; i++) {
                 answer.set.addAll(execute(n-i, m-1).marge(key, i).set);
@@ -80,3 +80,3 @@
             System.arraycopy(a, 0, a2, 1, a.length);
-            Arrays.sort(a2);
+
             return set.add(a2);

Index

Feed

Other

Link

Pathtraq

loading...