我想把从1到16的随机数放在一个二维数组中,而不重复。
我做了一个代码,消除重复,并把新的随机数放回数组,但它一直打印重复的数字。
哪一部分是错的,为什么?
#include <stdio.h>
#include <stdlib.h>
#include <time.h>
int main()
{
int A[4][4];
int i, j, k, l;
int num;
srand(time(NULL));
int count;
for(i = 0; i < 4; i++)
{
for(j = 0; j < 4; j++)
{
//Re:
num = rand() % 16 + 1;
A[i][j] = num;
for(k = 0; k <= i; k++)
{
count = 0;
for(l = 0; l <= j; l++)
{
if(A[k][l] == num)
{
if(k != i && l != j)
{
j--;
count = 1;
break;
// goto Re;
}
}
}
if(count == 1)
break;
}
}
}
for(i = 0; i < 4; i++)
{
for(j = 0; j < 4; j++)
{
printf("%3d", A[i][j]);
}
printf("\n");
}
}
我想把从1到16的随机数放入一个二维数组中,而不重复,我做了一个代码,它可以消除重复,并把新的随机数放回数组中,但它总是打印重复的数字。
1条答案
按热度按时间mqkwyuun1#
1.将数字1,...,16放入数组
tmp
中。1.在
tmp
上执行Fisher-Yates随机播放。1.使用Map
A[i/4][i%4] = tmp[i]
迭代tmp
,将其元素复制到A
。如果您不相信,请手动尝试
i
的几个值,以确保此方法有效。