仕様の不明点
引数(int n,int i, int k)の意味がわかりません。できれば追記をお願いします。
課題検討
与えられた数(n)が和になる、整数(1<=i<=n)の全ての組み合わせを求める課題だと思います。再帰で利用するため文字列をアキュムレータとして使っています。簡単すぎてかえって自信がありません。誤りがあれば指摘してください。繰り返し解くならメモ化してもよいかもしれません。
Java
1public class q353621 {
2
3 public static void main(String[] args) {
4 for (int i = 1; i < 10; ++i) {
5 checkRemainder(i, i, /* i, */ "");
6 System.out.println();
7 }
8 }
9
10 static void checkRemainder(int rem, int divisor, /* int v,*/ String accum) {
11
12 if (divisor == 0) return;
13 if (rem == divisor) {
14 // 余りがない -> 完了
15 System.out.println(accum + ((accum.length()==0)?"":",") + divisor);
16 } else if (rem > divisor){
17 // 余りがある
18 checkRemainder(rem - divisor, divisor, /* v,*/ accum + ((accum.length()==0)?"":",") + divisor);
19 }
20 /* if (rem == v) accum = ""; */
21 checkRemainder(rem, divisor - 1, /* v,*/ accum);
22
23 }
24
25}
結果も添付します。
bash
11
2
32
41,1
5
63
72,1
81,1,1
9
104
113,1
122,2
132,1,1
141,1,1,1
15
165
174,1
183,2
193,1,1
202,2,1
212,1,1,1
221,1,1,1,1
23
246
255,1
264,2
274,1,1
283,3
293,2,1
303,1,1,1
312,2,2
322,2,1,1
332,1,1,1,1
341,1,1,1,1,1
35
367
376,1
385,2
395,1,1
404,3
414,2,1
424,1,1,1
433,3,1
443,2,2
453,2,1,1
463,1,1,1,1
472,2,2,1
482,2,1,1,1
492,1,1,1,1,1
501,1,1,1,1,1,1
51
528
537,1
546,2
556,1,1
565,3
575,2,1
585,1,1,1
594,4
604,3,1
614,2,2
624,2,1,1
634,1,1,1,1
643,3,2
653,3,1,1
663,2,2,1
673,2,1,1,1
683,1,1,1,1,1
692,2,2,2
702,2,2,1,1
712,2,1,1,1,1
722,1,1,1,1,1,1
731,1,1,1,1,1,1,1
74
759
768,1
777,2
787,1,1
796,3
806,2,1
816,1,1,1
825,4
835,3,1
845,2,2
855,2,1,1
865,1,1,1,1
874,4,1
884,3,2
894,3,1,1
904,2,2,1
914,2,1,1,1
924,1,1,1,1,1
933,3,3
943,3,2,1
953,3,1,1,1
963,2,2,2
973,2,2,1,1
983,2,1,1,1,1
993,1,1,1,1,1,1
1002,2,2,2,1
1012,2,2,1,1,1
1022,2,1,1,1,1,1
1032,1,1,1,1,1,1,1
1041,1,1,1,1,1,1,1,1
105