c:如何在二维数组语言中生成无重复的随机数

d7v8vwbk  于 2022-12-03  发布在  其他
关注(0)|答案(1)|浏览(174)

我想把从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的随机数放入一个二维数组中,而不重复,我做了一个代码,它可以消除重复,并把新的随机数放回数组中,但它总是打印重复的数字。

mqkwyuun

mqkwyuun1#

1.将数字1,...,16放入数组tmp中。
1.在tmp上执行Fisher-Yates随机播放。
1.使用MapA[i/4][i%4] = tmp[i]迭代tmp,将其元素复制到A
如果您不相信,请手动尝试i的几个值,以确保此方法有效。

相关问题