前提・実現したいこと
はじめまして。
現在、下記の条件を満たす整数a[i]の組を列挙するコードを書きたいと思っています。
∑(i = 1からNまで) a[i] = K (N, Kは、N >= 1, K >= 0 を満たす整数)
具体的には、例えば
X + Y + Z = 6
を満たすような整数X,Y,Zの組を求めるような感じです。
組の数を求めるのではなく、各組を列挙したいです。
Nがわかっていれば、N-1回for文を入れ子にして列挙できそうですが、
Nが分からない場合、どのように一般化して書いたらいいか教えてもらいたいです。
よろしくお願いいたします。
N が 1 の時
6
N が 2 の時
0 6, 1 5, 2 4, 3 3, 4 2, 5 1, 6 0
N が 3 の時
0 0 6, 0 1 5, 0 2 4, 0 3 3, 0 4 2, 0 5 1, 0 6 0, 1 0 5, 1 1 4, 1 2 3, 1 3 2, 1 4 1, 1 5 0, 2 0 4, 2 1 3, 2 2 2, 2 3 1, 2 4 0, 3 0 3, 3 1 2, 3 2 1, 3 3 0, 4 0 2, 4 1 1, 4 2 0, 5 0 1, 5 1 0, 6 0 0
再帰でできそうですね。
コメントありがとうございます。
再帰でできるかと思って考えてはいたのですが、どうも漸化式が作れず。。
もう少し詳しく教えていただけますでしょうか。
i が 0 の時、K の取りうる範囲は 0 から 6 までです。
i が 1 の時、K の取りうる範囲は 0 から 6 - a[0] までです。
i が 2 の時、K の取りうる範囲は 0 から 6 - a[0] - a[1] までです。
取りうる範囲をすべて列挙するのを N 回繰り返してください。
動作確認済みのサンプルコードを回答に書きますが、C# 9.0 なので提出はできません。
回答1件
あなたの回答
tips
プレビュー