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

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

#include  #include  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. 创建一个包含36个元素的一维数组
  2. 用1到36的数字填充1D数组
  3. Fisher-Yates将1Darrays洗牌
  4. 使用1D数组的混洗内容来初始化2D数组

试试这个:

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