【发布时间】:2023-03-09 15:07:01
【问题描述】:
// 我的意思是通过我的例子来说明:
#include <stdio.h>
#include <stdlib.h>
#include <time.h>
int i;
int a;
for (a = 0;a <10;a ++) {
i = (rand()%10)+1; // generates a number from 1-10
printf("%d\n", i);
}
// 我希望循环生成一个数字,该数字给出一个以前没有生成的数字。例如,这样的输出:
1,3,6,2,8,9,4,10,5,7
代替:
3,9,10,3,7,9,2,7,10,1
换句话说,我不想要副本。
【问题讨论】:
-
您似乎正在尝试洗牌数组(就像洗牌)。谷歌“洗牌算法”。
-
一般来说,只需记住数组中以前的数字并进行比较,拒绝重复。但是您的特殊情况似乎是您希望特定范围内的每个数字恰好一次,这就是@RobertLozyniak 已经解决的问题。
-
查看(以及其他 SO 问题)Shuffle array in C 和 Is this C implementation of the Fisher-Yates shuffle correct,以及来自这些页面的链接,包括 The Danger of Naivete