【问题标题】:Random Integer, no repeat, within specific range随机整数,不重复,在特定范围内
【发布时间】:2018-06-22 12:57:06
【问题描述】:

详细场景:

描述中有 300 个可能的数字。

即数字必须在 1123 和 5543 之间

编号唯一且不重复

数字只有整数 1,2,3,4 和 5。

我想要实现的是一个可以按升序一次显示所有这些数字的程序。

我当前的代码:

var chars = "12345";
var stringChars = new char[4];
var random = new Random();
for (int i = 0; i < stringChars.Length; i++)
{
stringChars[i] = chars[random.Next(chars.Length)];
}
var finalString = new String(stringChars);
Console.WriteLine(finalString)

此代码运行良好,但我还有 2 个额外要求。

  1. 循环 300 次
  2. 按升序显示所有结果

编辑:

对于所有的困惑,我们深表歉意。此代码产生的是我想要的 4 位数字。但我希望它这样做 300 次。我想我可以使用循环,但这是我第一次使用 C#(我过去只使用过 vb.net)。我说的随机升序是指:产生一个随机数,当所有的数字都产生后,先升序排列再全部显示。

但是,如果订购它们会太复杂,那么没有它我很好。

【问题讨论】:

  • 到目前为止,您提供的只是您的规范。您的问题是什么?您通过尝试实现规范做了什么,该代码做了什么,与您希望它做的有什么不同?确保你提供了一个很好的minimal reproducible example 来展示所有这些,以及描述它的详细解释。
  • 您必须提出问题,否则我们无法为您提供帮助。另外,永远不要使用 goto
  • 这怎么可能既是随机的又是升序的?
  • 我确实读过“问题”;它令人困惑,写得不好,而且似乎没有包含实际问题。

标签: c# string random generator


【解决方案1】:

您的要求并不完全清楚,但这里有一些代码将打印与您提供的描述相匹配的 611(不是 300)数字,以升序排列。

如果我正确理解了您的问题,您将希望从这个更大的集合中抽取 300 个不同的元素,对它们进行排序,然后将它们打印出来。您可能会考虑使用 Fisher-Yates shuffle 来执行此操作。随机排列列表,取出前 300 个,然后对它们进行排序。

public static void Main (string[] args) {
  var digits = new [] { 1, 1, 2, 3 };
  for (var num = DigitsToInt(digits); num <= 5543; num = DigitsToInt(digits)) {
    Console.WriteLine(num);

    for (int i = 3; i >= 0; i--) {
      digits[i]++;
      if (digits[i] < 6) {
        break;
      } else {
        digits[i] = 1;
      }
    }
  }
}

private static int DigitsToInt(int[] digits) {
  return 1000 * digits[0] + 100 * digits[1] + 10 * digits[2] + digits[3];
}

【讨论】:

  • 非常抱歉,我的错,但我忘记了另一个必需的规则,即两位数(我编辑了问题)
  • @USERNNNNN - 请不要因为忘记了什么而更改问题。添加附加到问题的编辑,但不要修改它。
  • @Enigmativity - 为什么不呢?这个问题只会变得越来越难以理解,它变得越长越脱节。用清晰、简洁的描述替换当前的描述肯定会更好,不是吗?
  • @AlexReinking - 澄清一个问题非常好,但更改一个使现有答案无效的问题则不是。如果有人问“什么是最快的动物?”并给出了“游隼”的答案,但随后 OP 说,“哦,我的意思是什么是最快的哺乳动物?”那么猎鹰回答者看起来很愚蠢。
  • 请您删除您的答案好吗?我已经掩盖了这个问题,所以如果你允许我先删除你的答案,我将删除它。
猜你喜欢
  • 1970-01-01
  • 2014-10-23
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-07-29
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多