标签:随机 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