标签:随机 std 假设 遇到 代码 rand i++ 产生 位置
#include "pch.h"
#include "stdio.h"
#include "stdlib.h"
#include "time.h"
int m[9] = {0};
int main(void)
{
srand(time(0));
for (int i = 1; i < 10; i++)
{
m[i - 1] = rand()%9+1;
for (int j = 0; j < i - 1; j++)
{
while (m[j] == m[i - 1])
{
m[i - 1] = rand() % 9 + 1;
}
}
}
for (int i = 0; i < 9; i++)
{
printf("%d ",m[i]);
}
}
大体思路是没有问题的,产生一个随机数,我们假设它在 m[i-1] 位置上,那么需要从m[0]到m[i-2]和m[i-1]依次判断随机数有没有在之前产生过。
while (m[j] == m[i - 1])
{
m[i - 1] = rand() % 9 + 1;
}
但这段是有问题的,当遇到前面已经产生过的随机数则又产生一个新的随机数,而此时m[j]的j的值可能不是从0开始的,所以m[j]会从当前j的值一直走到m[i-2],而少了m[0]~m[j-1]的判断,这是产生bug的根本原因。
标签:随机 std 假设 遇到 代码 rand i++ 产生 位置
原文地址:https://www.cnblogs.com/yfish/p/9829035.html