Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/c/62.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/arrays/12.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C 将给定列表中的所有数字按随机顺序分配到2D数组中_C_Arrays - Fatal编程技术网

C 将给定列表中的所有数字按随机顺序分配到2D数组中

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请注意,说“这些数字都是不同的”会比说“这些数字是随机的”立即

我已经用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请注意,说“这些数字都是不同的”会比说“这些数字是随机的”立即降低随机性。您似乎觉得重复会降低整个数字集合的随机性,这是不正确的

你似乎想要一个排列。实现这一点的一种方法是进行随机洗牌,即用唯一的数字初始化矩阵,然后重复随机选取两个单元格并交换其内容。毫无疑问,有各种方式可以知道你何时进行了“足够”的交换

以下是如何实现一次交换:

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;
}