C 将给定列表中的所有数字按随机顺序分配到2D数组中
我已经用c编写了下面的程序,将K个数字按arandom顺序分配到M*N(M=row,N=column)数组,其中K=MN,这样每个单元格都会得到一个从0到MN的唯一数字。但有一个问题。我将一些重复的数字放入求和单元格如何获取所有唯一的数字? 示例程序:#C 将给定列表中的所有数字按随机顺序分配到2D数组中,c,arrays,C,Arrays,我已经用c编写了下面的程序,将K个数字按arandom顺序分配到M*N(M=row,N=column)数组,其中K=MN,这样每个单元格都会得到一个从0到MN的唯一数字。但有一个问题。我将一些重复的数字放入求和单元格如何获取所有唯一的数字? 示例程序:# #包括 #包括 #包括 #定义第5行 #定义第5列 整数总计=行*列; int A[行][col]; main() { int i,j; srand(时间(空)); 对于(i=0;i请注意,说“这些数字都是不同的”会比说“这些数字是随机的”立即
#包括
#包括
#包括
#定义第5行
#定义第5列
整数总计=行*列;
int A[行][col];
main()
{
int i,j;
srand(时间(空));
对于(i=0;i请注意,说“这些数字都是不同的”会比说“这些数字是随机的”立即降低随机性。您似乎觉得重复会降低整个数字集合的随机性,这是不正确的
你似乎想要一个排列。实现这一点的一种方法是进行随机洗牌,即用唯一的数字初始化矩阵,然后重复随机选取两个单元格并交换其内容。毫无疑问,有各种方式可以知道你何时进行了“足够”的交换
以下是如何实现一次交换:
void random_point(int *x, int *y)
{
*x = rand() % col;
*y = rand() % row;
}
void permute(void)
{
int x1, y1, x2, y2;
random_point(&x1, &y1);
random_point(&x2, &y2);
const int tmp = A[y1][x1];
A[y1][x1] = A[y2][x2];
A[y2][x2] = tmp;
}
这是非常基本的。所以你不想要随机数,你想要一个随机排列?是的。你是对的@EOF设置初始数,然后用fisher-yates随机排列将它们随机排列?你能展示一个演示代码吗?@thrigcan你展示一个随机排列的示例代码吗?@unwind
void random_point(int *x, int *y)
{
*x = rand() % col;
*y = rand() % row;
}
void permute(void)
{
int x1, y1, x2, y2;
random_point(&x1, &y1);
random_point(&x2, &y2);
const int tmp = A[y1][x1];
A[y1][x1] = A[y2][x2];
A[y2][x2] = tmp;
}