将随机数存储在2d数组中

时间:2016-05-26 10:38:36

标签: c

我将一些随机数存储到二维数组中,但有些数字似乎位于边/边上。我不确定它有什么问题。我想要的是在2d数组的边界内有所有随机数。

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

#define ROW 9
#define COL 9


void gameboard(char box[ROW][COL])
{
    int x,y;

    for(x = 0; x < ROW; x++)
    {
        for(y = 0; y  <COL; y++)
        {
            box[x][y] =' '; 
        }   
    }
    for(x = 0; x < ROW; x++)
    {
        box[0][x]='#';
        box[x][8]='#';

        box[x][0]='#';
        box[8][x]='#';   
    }    
 }


void rnum(char box[ROW][COL])
{
     int x,r1,r2,r3,r4;
     char r='1';
     srand( (unsigned) time(NULL)); 

     for(x=0;x<9;x++)
     { 
        r1 =  rand()%9;
        r2 =  rand()%9;
        r3 =  rand()%9;
        r4 =  rand()%9;

        box[r1][r2]= r + x;
        box[r3][r4]= r + x;
     }     
}


int main(void)
{
    char box[ROW][COL];
    char name[20];
    int x,y,choice;

    gameboard(box);

    rnum(box);     

    for(x = 0; x < ROW; x++)
    {
        for(y = 0; y  < COL; y++)
        {
         printf(" %c ",box[x][y]);
        }
        printf("\n\n");
    }

    rnum(box);

    return 0;
}

这是输出:

Screen shot of output

5 个答案:

答案 0 :(得分:0)

rand() % 9会返回08之间的数字。但是您的数组边框占据了索引08

为避免覆盖,请在17之间选择一个随机数:

r1 = 1 + rand() % 7;

请注意,缩放rand()的输出(除以RAND_MAX + 1然后乘以上限)比使用余数更少偏差,但在您的情况下,它可能是不重要。

答案 1 :(得分:0)

我认为关键在于:

 for(x=0;x<9;x++)
 {
     r1 =  rand()%9;
     r2 =  rand()%9;
     r3 =  rand()%9;
     r4 =  rand()%9;

     box[r1][r2]= r + x;
     box[r3][r4]= r + x;
  } 

因为r1,r2,r3,r4是随机数,并且边界的坐标包含在其中。所以数字似乎在边/边上是正常的。

答案 2 :(得分:0)

照顾边界。不应覆盖任何元素[7]#,因为for loop字符已存在。计数器也决不超出数组边界。这是rnum()中的for( x=0; x<7; x++) { r1 = 1 + rand()%7; //always between 1 and 6 ! r2 = 1 + rand()%7; r3 = 1 + rand()%7; r4 = 1 + rand()%7; box[r1][r2] = r + x; box[r3][r4] = r + x; }

public void setCharAt(int index, char ch) {
    if ((index < 0) || (index >= count))
        throw new StringIndexOutOfBoundsException(index);
    value[index] = ch;
}

答案 3 :(得分:0)

可以尝试以下代码:

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

#define ROW 9
#define COL 9

void gameboard(char box[ROW][COL]) {
    int x,y;
    for(x = 0; x < ROW; x++) {
        for(y = 0; y  <COL; y++) {
            box[x][y] =' '; 
        }
    }
}

void rnum(char box[ROW][COL]) {
    int x,r1,r2,r3,r4;
    char r='1';
    srand( (unsigned) time(NULL)); 

    for(x=0;x<9;x++) {
        r1 =  rand()%9;
        r2 =  rand()%9;
        r3 =  rand()%9;
        r4 =  rand()%9;

        box[r1][r2]= r + x;
        box[r3][r4]= r + x;
    } 

    for(x = 0; x < ROW; x++) {
        box[0][x]='#';
        box[x][8]='#';

        box[x][0]='#';
        box[8][x]='#';
    }
}

int main(void) {
    char box[ROW][COL];
    char name[20];
    int x,y,choice;

    gameboard(box);

    rnum(box);     

    for(x = 0; x < ROW; x++) {
        for(y = 0; y  < COL; y++) {
            printf(" %c ",box[x][y]);
        }
        printf("\n\n");
    }

    rnum(box);

    return 0;
}

答案 4 :(得分:0)

如果您需要保持1-9之间的随机数范围,您可以使用以下功能。但是我不知道你需要多少随机数来填补这个块,所以我留给你。

    void rnum(char box[ROW][COL]) {
      int x,r1,r2,r3,r4;
      char r='1';
      srand( (unsigned) time(NULL));
      int iter = 9;
      x = 0;
      while (iter != 0) {
        r1 =  rand()%9;
        r2 =  rand()%9;
        r3 =  rand()%9;
        r4 =  rand()%9;
        if (r1 == 0 || r2 == 0 || r1 == 8 || r2 == 8 ||
            r3 == 0 || r4 == 0 || r3 == 8 || r4 == 8)
          continue;
        else {
          box[r1][r2]= r + x;
          box[r3][r4]= r + x;
          iter--;
        }
        x++;
     }
  }