C随机矩阵,数字在0到9之间

时间:2016-07-25 15:43:13

标签: c matrix

我是C新手,我正在尝试制作一个矩阵5x4只有0到9之间的数字,其中每个数字需要在那里2次(我正在尝试制作记忆游戏)。我得到了这个代码,但我认为这是一个混乱,它不起作用,所以我的问题是,我如何改进我的代码或如何以不同的方式制作这个矩阵?

{{1}}

3 个答案:

答案 0 :(得分:1)

这可以让您的计划更短一些。

我已将n0,n1,....放入由r。

索引的数组中
#include <stdio.h>
#include <stdlib.h>
#include <time.h>

#define MaxC 4
#define MaxL 5

int main()
{
    int na[10] = {0};
    int n[MaxL][MaxC], i=0;
    srand((unsigned)time(NULL));

    while(i<MaxL)
    {
        int j=0;
        while(j<MaxC)
        {
            int r = rand() % 10;
            if(na[r]<2)
            {
                ++na[r];
                n[i][j] = r;
                printf(" %3d ",n[i][j]);
                ++j;
            }
        }
        ++i;
        printf("\n");
    }
    return 0;
}

示例输出:

   2    6    1    8 
   4    7    0    2 
   5    3    7    8 
   9    1    0    3 
   5    6    4    9 

您的代码会继续尝试随机数,直到您将每个数字都设置为两次。这不是最好的方法。

相反,您可以在固定位置使用20个数字初始化矩阵,然后对矩阵进行随机混洗。

答案 1 :(得分:1)

首先,您已在每个j++语句中放置if。如果你只是在循环结束时离开j++,它会看起来更干净。 print语句也是如此。

其次,如果您可以发布该程序正在打印的内容或描述 它无法正常工作,那么这将有助于您获得问题的答案。如果不自己尝试,我就不会看到你的代码有什么功能问题。

编辑:有关进一步简化代码的方法,请参阅4386427的答案。

答案 2 :(得分:1)

我可以帮你吗?如果在阵列上替换十个nX变量,则可以简化代码。看看这个:

int main(){
    int c[10] = {0};
    int i=0,j=0,r;
    int n[MaxL][MaxC];
    srand(time(NULL));

    for(i = 0; i < 5; i++) {
      for(j = 0; j < 4; j++) {
        do {
           r=(rand()%10);
        } while( c[r] > 2);
        ++c[r];
        n[i][j]=r;
        printf(" %3d ",n[i][j]);
      }
      printf("\n");
    }
    return 0;
}