C++ 生成随机数并避免重复值
我现在正试图: 1.随机生成四个数字。 2.将它们存储在数组中。 3.确保数组中的值不重复 以下是我的想法: 1.在for循环中每次生成一个数字(x4次) 2.生成数字后,使用内部循环将其与上一个数组值进行比较 我的代码:C++ 生成随机数并避免重复值,c++,arrays,C++,Arrays,我现在正试图: 1.随机生成四个数字。 2.将它们存储在数组中。 3.确保数组中的值不重复 以下是我的想法: 1.在for循环中每次生成一个数字(x4次) 2.生成数字后,使用内部循环将其与上一个数组值进行比较 我的代码: do { for (int i = 0; i < 4; i++) { value[i] = rand() % 6 + 1; // Generating value for (int j = 0; i >
do
{
for (int i = 0; i < 4; i++)
{
value[i] = rand() % 6 + 1; // Generating value
for (int j = 0; i > j; j++)
{
if (value[i] == value[j])
{
dup = true; break;
}
if (dup == true) break;
}
}
for (int i = 0; i < 4; i++)
{
cout << "value: " << value[i] << " " << endl;
}
} while (dup != true);
do
{
对于(int i=0;i<4;i++)
{
值[i]=rand()%6+1;//生成值
对于(int j=0;i>j;j++)
{
如果(值[i]==值[j])
{
dup=真;中断;
}
如果(dup==真)中断;
}
}
对于(int i=0;i<4;i++)
{
cout至于为什么会得到重复的结果,这是因为您在(dup!=true)
期间继续重试
这意味着它将继续尝试,直到有一个重复
在任何情况下,这类问题通常最好用a来解决,但是,对于这个小搜索空间(六分之四),您可以不使用您的方案 但是,最好按照以下步骤检查每个数字与之前的每个数字:
def getFourFromSix():
num = []
num.append (random(1..6))
num.append (num[0])
while num[1] == num[0]:
num[1] = random(1..6)
num.append (num[0])
while num[2] == num[0] or num[2] == num[1]:
num[2] = random(1..6)
num.append (num[0])
while num[3] == num[0] or num[3] == num[1] or num[3] == num[2]:
num[3] = random(1..6)
return num
这样,你就不会一路返回,每次找到重复的号码就重新启动,你只需要在当前号码上再试一次
如果您确实想要Fisher-Yates shuffle(如果数字池变大,它会更优雅一些),M-from-N变体非常简单:
def getMFromN(m, n):
# Sanity checking.
if m > n:
throw "Trying to extract too many things"
num = []
# Populate choices that we will select from.
for index in 0..n-1:
choice[index] = index + 1
# For each desired number.
for index in 0..m:
# Copy from choices to results.
choose = random(0..n-1)
num.append (choice[choose])
# Remove from results so no repeats.
n = n - 1
choice[choose] = choice[n]
return num
您的代码中存在逻辑缺陷。当您从循环中中断时,您已经将兰德公司生成的重复值存储到了“值”数组中。您必须重新处理索引,直到没有重复的数据结构为止,或者使用更好的数据结构
为什么不使用一个
集合
,这样它只会保存唯一的值,当你填充了N个唯一的元素时,你可以退出/中断。你似乎忘记问一个问题。很抱歉。我现在要添加看看这个答案,dup
在哪里设置为false
?一旦为true
,它会不会停止永远是这样吗?还有,你为什么要打破两次?你好,谢谢你的快速回复。我现在正在学习Fisher Yates shuffle,这就是我要找的,非常感谢,谢谢!!!