あなたが探しているものは、整数compositions、またはpartitionsと呼ばれています。テストされていない
public static IEnumerable<List<int>> Compositions(int n)
{
if (n < 0)
throw new ArgumentOutOfRangeException(nameof(n));
return GenerateCompositions(n, new List<int>());
}
private static IEnumerable<List<int>> GenerateCompositions(int n, List<int> comp)
{
if (n == 0)
{
yield return new List<int>(comp); // important: must make a copy here
}
else
{
for (int k = 1; k <= n; k++)
{
comp.Add(k);
foreach (var c in GenerateCompositions(n - k, comp))
yield return c;
comp.RemoveAt(comp.Count - 1);
}
}
}
:
組成物は、以下のように(私は間違っていない場合は、辞書式順序で)再帰的に生成することができます!これはPythonの実装から転写されました。誰でも慣れ親しんだC#でコードを修正したり、コードを更新したい場合は、自由に感じてください。また
、as @aah noted、n
の組成物の数は2^(n-1)
ので、これも適度n
ために扱いにくくなります。
具体的な問題を明確にしたり、詳細を追加して必要なものを正確に強調してください。現在書かれているとおり、あなたが求めていることを正確に伝えるのは難しいです。これまで行ってきたことも見せてください – Marusyk
宿題のように疑わしく見えます。それにもかかわらず、あなたはこれまでに試したことを提供する必要があります。 – GEEF
そのようなことを言うのは気の利いていません。私は101 OKEYというトルコのゲームを開発しようとしています。ゲームには21個のタイルがあるので、私はこの理由のために正確な数字を出しました。そして、異なる点からタイルセリを分離する最良の点を計算するための組み合わせが必要です。 –