【问题标题】:Generate a Unique 6 digit number from set of 0-49 such that no two numbers repeat?从 0-49 的集合中生成一个唯一的 6 位数字,这样没有两个数字重复?
【发布时间】:2015-08-14 06:10:45
【问题描述】:

我得到了一个集合 {0,1,2,....49}。 我必须生成一组数字(1 位或 2 位数字),以便其中没有两个数字重复 前

1 2 3 4 5 6 

或

1 23 32 8

这里 2 是重复的,但 2 digit num '23' 或 '32' 不是。 这就是我卡住的地方。 我试过This。但找不到解决办法。 请帮忙。

编辑:抱歉之前解释不清楚。 这是 1 次生成,我想生成所有这些可能的数字。

【问题讨论】:

  • 您链接的解决方案有什么问题?
  • 你能提供你试过的代码吗?并更具体地描述您的问题?
  • 您需要确定是要查找“6 位数字”还是“某些数字的集合,其总位数为 6”。例如,是什么阻止了您只打乱 10 位数字 (0..9) 然后选择前 6 位?根本不需要“0-49 的集合”。
  • 你在标题中提到了“独特”这个词,这个词在这个上下文中是什么意思?每次生成一个新号码时,您都需要一个以前从未见过的号码?

标签: c# algorithm


【解决方案1】:

这是您提出的问题的一个工作示例。希望对您有所帮助。我认为没有必要逐行解释代码,因为代码会说话。

Random rnd = new Random();
string output="";
List<int> numbersTaken = new List<int>(); 
int curNumber;
while (output.Length < 6)
  {
    Label:      curNumber = rnd.Next(0, 49);
    if (!numbersTaken.Contains(curNumber) && output.Length + curNumber.ToString().Length <= 6)
       {
          output += curNumber;
          numbersTaken.Add(curNumber);
       }
    else
       {
          if (output.Length <= 6) { return; }
          goto Label;
       }                
  }

更新: 在特定的执行点,让输出为output="12451" 和curNumber=33,所以很明显33 尚未被采用,但如果我们将33 添加到输出中,那么output 的长度将超过limit6 所以我们必须寻找字符串中不存在的另一个随机数(goto 重定向到下一个随机数)。

【讨论】:

  • 请添加对您在那里所做的事情的解释。您的代码的某些部分对我来说毫无意义。
  • 我认为没有必要逐行解释代码,因为代码自己会说话。
  • 你没有明白我的意思。 label: 和各自的 goto 在它们现在的位置上毫无用处。 while 循环无论如何都会做同样的事情。
  • @banana:绝对不是。如果不存在,则可能有机会获得长度为 7 的字符串
猜你喜欢
  • 2012-04-05
  • 1970-01-01
  • 2021-10-23
  • 1970-01-01
  • 1970-01-01
  • 2022-01-26
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多