作者:发的好地方 | 来源:互联网 | 2023-01-01 12:40
我之前尝试过发帖,但在编辑了5次问题后,它变得阴天并没有帮助任何人.所以这次我会问正确,所以请考虑帮助(如果你认为这是重复的话,那么对于较旧的帖子这样做只会让事情变得更糟)
首先,我想使用C#创建一个非常简单的程序,它将随机显示符合以下所有条件的所有数字:
1.生成的数字必须介于1123和5543之间
2.生成的数字必须只有数字1,2,3,4和5
3.不得重复生成的数字
4.每个数字必须重复其中一个数字(如1146或2627)而不是更多
当我做一些数学时,我得出的结论是,恰好有300个数字适合这里.
以下代码完成了部分工作:它生成一个4位数字,只有数字1-5.但是还有其他3个规则我不知道如何执行.这是我第一次使用C#,(过去只有VB.Net),所以我不知道如何进一步.
var chars = "12345";
var stringChars = new char[4];
var random = new Random();
for (int i = 0; i
就这一点而言Console.WriteLine
,我并不关心输出的显示方式.我看到一个建议说我将数据导出到一个.txt
文件中,但我所关心的只是一次看到数字,但是彼此分开(通过断点或逗号或双倍间距或任何东西).
我在开头"随机"的意思并不是完全随机的; 我的意思是随机的300种可能性,直到所有的完成.
我不关心它们是否有序,我可以使用一些在线服务来订购它们,一旦我完成了更容易的事情.
在此先感谢,只是快速说明,这不是一个功课问题,因为"允许"和"必需".背景故事与Stack Overflow无关,所以我省略了它.
就像我说的,如果你认为这是重复的,那就不是.另一篇文章太乱了.
编辑:
我再次尝试解决,发现只有60个数字.这就是我做的
(这是数学,但我把它放在那里以便理解)
我将4个破折号作为选项的插槽._ _ _ _
对于第一个"插槽",我有五个选项(1-5)所以我写了5.因为必须重复一个数字,所以下一个必须是唯一选项(我以前认为我们仍有5个选项).所以有了一个号码,还有4个号码,因为我不能有2个重复的数字.然后最后一位数只有3,所以我们在我的"老虎机"上看5,1,4,3.然后我将它们相乘得到5x1x4x3 = 60总数的总可能性.
我知道这可能与本网站无关,但我认为有必要知道代码是否可行.
再次感谢.
1> Aleks Andree..:
试试这个代码.它创建一个范围内的所有数字,然后将其洗牌:
var validDigits = new HashSet {'1', '2', '3', '4', '5'};
var numbers = Enumerable.Range(1123, 5543 - 1123 + 1)
.Where(i => i.ToString().All(c => validDigits.Contains(c))) // only 1, 2, 3, 4, 5
.Where(i => i.ToString().Distinct().Count() == 3) // only one repeated number
.OrderBy(x => Guid.NewGuid()) // shuffle numbers
.ToArray();
现在您可以将每个数字打印到控制台
foreach (var number in numbers)
Console.WriteLine(number);