详细方案:
有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个额外要求。
修改
抱歉所有的困惑。这段代码产生的是一个4位数字,就像我想要的那样。但我想这样做300次。我想我可以使用Loop,但这是我第一次使用C#(过去我只使用过vb.net)。我的意思是随机和升序是:产生一个随机数,当生成所有数字时,在显示它们之前按升序排序。
然而,如果订购它们会太复杂,那么没有它我就没事了。
答案 0 :(得分:2)
您所询问的内容并不完全清楚,但这里有一些代码会打印出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];
}