【问题标题】:C Programming; Producing a 2-Dimensional Matrix with Random Numbers without RepetitionC编程;生成具有随机数且不重复的二维矩阵
【发布时间】:2016-04-30 07:22:23
【问题描述】:

我想通过向行和列中的元素插入随机数而不重复来生成一个 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;
}

【问题讨论】:

  • 你有什么问题?

标签: c arrays matrix random


【解决方案1】:

为了避免重复:

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

【讨论】:

    【解决方案2】:

    试试这个:

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

    【讨论】:

      猜你喜欢
      • 2020-05-18
      • 1970-01-01
      • 2015-11-26
      • 1970-01-01
      • 1970-01-01
      • 2021-03-24
      • 2018-02-17
      • 2021-06-30
      • 2018-10-26
      相关资源
      最近更新 更多