用c#输入一个正整数n,返回在0 - n中所有和为n的不重复组合
时间: 2024-04-10 08:35:09 浏览: 15
好的,可以使用递归来解决这个问题。下面是一个用C#编写的示例代码:
```csharp
using System;
using System.Collections.Generic;
class Program
{
static void Main(string[] args)
{
Console.Write("请输入一个正整数n:");
int n = int.Parse(Console.ReadLine());
List<List<int>> combinations = GetCombinations(n);
Console.WriteLine("和为n的不重复组合如下:");
foreach (List<int> combination in combinations)
{
Console.WriteLine(string.Join(" + ", combination));
}
}
static List<List<int>> GetCombinations(int n)
{
List<List<int>> combinations = new List<List<int>>();
List<int> currentCombination = new List<int>();
GenerateCombinations(n, 1, currentCombination, combinations);
return combinations;
}
static void GenerateCombinations(int n, int start, List<int> currentCombination, List<List<int>> combinations)
{
if (n == 0)
{
combinations.Add(new List<int>(currentCombination));
return;
}
for (int i = start; i <= n; i++)
{
currentCombination.Add(i);
GenerateCombinations(n - i, i, currentCombination, combinations);
currentCombination.RemoveAt(currentCombination.Count - 1);
}
}
}
```
这段代码会先让用户输入一个正整数n,然后通过调用`GetCombinations`函数来获取所有和为n的不重复组合。`GetCombinations`函数会初始化一个空的组合列表,并调用`GenerateCombinations`函数来生成所有组合。`GenerateCombinations`函数使用递归的方式来生成组合,通过`start`参数来控制不重复的组合。
运行代码后,会输出所有和为n的不重复组合。例如,如果输入n为5,输出结果如下:
```
和为n的不重复组合如下:
1 + 4
2 + 3
1 + 1 + 3
1 + 2 + 2
1 + 1 + 1 + 2
1 + 1 + 1 + 1 + 1
```