【问题标题】:Generate Combinations for a set of Numbers为一组数字生成组合
【发布时间】:2012-10-15 15:30:26
【问题描述】:

在 C# 中,我想为 {1,2,3,4,5,6,7,8,9,0} 生成 5 位数字的组合。所以,我想得到 11111、11112 等最多 99999 的输出。

当我将它扔到控制台应用程序中时,我没有得到任何可以工作的东西。

组合总是出错...

【问题讨论】:

  • 在您的简单示例中,您根本不需要生成组合,您可以将 00000 到 99999 保存在数组或计数中,视情况而定。您的实际用例是否有不同的输入?
  • 您是否希望生成列表的所有排列?
  • 任何答案都解决了您的问题吗?如果是这样,您可以通过单击答案投票小部件下的复选标记来选择它作为答案

标签: c# for-loop numbers combinations


【解决方案1】:

执行一个 for 循环并从 11111 计数到 99999:

for(int i = 11111; i<=99999; i++){
    var combination = i.ToString();
    Console.WriteLine(combination);
}

或者如果你想要 00001 到 99999

for (int i = 0; i <= 99999; i++)
{
    var combination = String.Format("{0:D5}", i);
    Console.WriteLine(combination);
}

【讨论】:

  • 请注意,如果您要选择的一组值不完全是数字 0...9,您可以使用 Convert.ToString() 的重载,它以您必须的项目数为基数从中选择。然后,您只需将for 循环的结束条件更改为 x ^ y,其中 X 是您选择的项目数,Y 是结果中的位数。
  • 谢谢!现在,我如何才能逐个获取生成的每个单独的值,并将其用作输入?
  • 每个单独的值都在combination 变量中
【解决方案2】:

简单地从 0 计数到 99999 将产生所有组合(如果你想要所有组合,你真的应该从 00000 开始)

【讨论】:

    【解决方案3】:

    如果您正在寻找一种组合数字的方法,而不是专门用于获取序列,您可以对其进行 linq 查询。

             var bob = new [] {1,2,3,4,5,6,7,8,9,0};
             var greg =
                 from a in bob
                 from b in bob
                 from c in bob
                 from d in bob
                 from e in bob
                 select string.Concat(a, b, c, d, e);
    

    【讨论】:

    • 只有在编译时知道数组中的项目数时才有效。
    • 没有。该数组可以动态构建,并且可以随时构建笛卡尔积。你可能会认为它只适用于 5 个字符的编译,这是真的。
    • 正确,我的意思是这仅适用于固定大小的输出,而不适用于固定大小的输入数组。不过,它仍然经常是不需要修复的。
    猜你喜欢
    • 2012-04-26
    • 1970-01-01
    • 2021-01-02
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多