C编程;生成具有随机数的二维矩阵,无需重复

时间:2016-04-30 07:22:23

标签: c arrays matrix random

我希望通过在行和列中的元素中插入随机数而不重复来生成6x6矩阵。到目前为止这是我的代码。谢谢您的帮助!

#include <stdio.h>
#include <stdlib.h>

int main(void)
{
int array[6][6];
int rows, columns;
int random;

srand((unsigned)time(NULL));

for(rows=0;rows<6;rows++)
    {
        for(columns=0;columns<6;columns++)
            {
                random=rand()%36+1;

                array[rows][columns] = random;
                printf("%i",array[rows][columns]);
            }

        printf("\n");
    }

return 0;
}

2 个答案:

答案 0 :(得分:3)

为避免重复:

  1. 创建一个包含36个元素的一维数组
  2. 用1到36的数字填充1D数组
  3. Fisher-Yates shuffle 1D数组
  4. 使用1D数组的混洗内容初始化2D数组

答案 1 :(得分:1)

试试这个:

#include<stdio.h>
#include<stdlib.h>

int main()
{
    int array[6][6];
    int rows,columns;
    int random,i;
    int randvalues[36],m=0;
    int t,j;


    for(i=0;i<36;i++)     //assigning values 1 to 36 
         randvalues[i]=i+1;

    for(i=0;i<36;i++)      //shuffle logic
    {
         j=i+rand()/(RAND_MAX/(36-i) + 1);
         t=randvalues[j];
         randvalues[j] = randvalues[i];
         randvalues[i] = t;
    }

    for(rows=0;rows<6;rows++) //conversion from 1-D to 2-D array and printning
    {
        for(columns=0;columns<6;columns++)
        {
            array[rows][columns] = randvalues[m++];
            printf("%d " , array[rows][columns]);
        }
        printf("\n");
    }
    return 0;
}