2016-04-30 73 views
0

我想通过向行和列中的元素插入随机数而不重复来生成一个6x6矩阵。这是我的代码到目前为止。感谢您的帮助!C编程;用随机数制作二维矩阵而不重复

#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; 
} 
+1

你有什么问题? – dbf

回答

3

为了避免重复:

  1. 创建36个元素的一维数组
  2. 填充1D阵列与数字1直通36
  3. Fisher-Yates shuffle 1D阵列
  4. 使用该混洗用于初始化2D阵列的1D阵列的内容
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; 
} 
+0

我试过了。有用。 –