C# 不重复地列出数字1-9的所有可能组合

C# 不重复地列出数字1-9的所有可能组合,c#,C#,我有一个代码,列出了6个长度的数字组合,但它在4-5-6-7-8-9处停止。我需要它继续并在第一列到达9时停止。我试过很多方法,但都不能解决这个问题 static void Main() { Console.Write("n = "); var n = int.Parse(Console.ReadLine()); Console.Write("k = "); var k = int.Parse(Console.ReadLine()); f

我有一个代码,列出了6个长度的数字组合,但它在4-5-6-7-8-9处停止。我需要它继续并在第一列到达9时停止。我试过很多方法,但都不能解决这个问题

 static void Main()
   {
      Console.Write("n = ");
     var n = int.Parse(Console.ReadLine());

    Console.Write("k = ");
    var k = int.Parse(Console.ReadLine());

    foreach (var combo in Combinations(k, n))
    {
        Console.WriteLine(string.Join(", ", combo));
    }
    Console.ReadLine();
}

private static IEnumerable<int[]> Combinations(int k, int n)
{
    var result = new int[k];
    var stack = new Stack<int>();
    stack.Push(1);

    while (stack.Count > 0)
    {
        var index = stack.Count - 1;
        var value = stack.Pop();

        while (value <= n)
        {
            result[index++] = value++;
            stack.Push(value);
            if (index == k)
            {
                yield return result;
                break;
            }
        }
    }
}
static void Main()
{
Console.Write(“n=”);
var n=int.Parse(Console.ReadLine());
Console.Write(“k=”);
var k=int.Parse(Console.ReadLine());
foreach(组合中的var组合(k,n))
{
Console.WriteLine(string.Join(“,”,combo));
}
Console.ReadLine();
}
私有静态IEnumerable组合(int k,int n)
{
var结果=新整数[k];
var stack=新堆栈();
堆栈推送(1);
而(stack.Count>0)
{
var index=stack.Count-1;
var值=stack.Pop();

while(value我建议将长度(k)缩短到2,将范围(n)减少到3,这样你就可以更好地理解你的程序在做什么以及为什么它缺少值。我怀疑你的情况
while(stack.Count>0)
可能是错误的条件。您可能需要循环通过第一个数字1到n,或者除此之外。可能您需要在堆栈开始时将1到n推到堆栈上,而不是仅推1?无论如何,如果将问题缩小,您应该能够更好地理解问题。我不想抢走您的时间在学习经验方面。:)

k=2,n=3的程序输出为

1, 2
1, 3
2, 3

希望这有助于您理解所缺少的内容。您忽略了在2、3之前输出2、1。您不能总是假设所有值都像代码看起来那样递增。

在循环上设置一个条件断点,然后调试,看看会发生什么。数学术语称为“置换”.知道如何在数学方面做这件事是教计算机为你做这件事的一项要求。这也有助于找到它的核心指导原则。这段代码正在工作,但由于我不知道的原因停止在4 5 6 7 8 9。顺便说一句,我需要数字的组合。可能重复“我写了一些错误代码,但我找不到错误”这不是一个问题,也不是一个用于查找您编写的bug的服务。您有具体的问题吗?