尝试将0放在2d阵列的10个随机位置

时间:2016-04-29 08:35:58

标签: c arrays 2d

我在C中有一个项目,我需要找到一种方法将0放在2d数组的10个随机位置,比方说pinakas[3][10]。让我提供一些代码来更好地解释自己:

int main(int argc, char *argv[]) {
    int i,j,x,y;
    int pinakas[3][10];
    for (i=0;i<3;i++)
    {
        for(j=0;j<10;j++)
        {
            pinakas[i][j]=1;
        }
    }
    for (i=0;i<10;i++)
    {   do
        {
        int x=rand()%2;
        int y=rand()%9;
        }
            while (pinakas[x][y]=0);
            pinakas[x][y]=0;
    }
    for (i=0;i<3;i++)
    {
        for(j=0;j<10;j++)
        {
            printf("%d\n",pinakas[i][j]);
        }
    }
    return 0;
}

首先我将数据放在数组的每个位置,然后我试图找到一种方法将零放在数组的10个随机位置。非常感谢。

2 个答案:

答案 0 :(得分:3)

部分

do
{
    int x=rand()%2;
    int y=rand()%9;
}
while (pinakas[x][y]=0);

将给出一个错误,因为x和y在锁中声明,并且在块外不会被识别。尝试:

int x, y;
do
{
    x=rand()%3;
    y=rand()%10;
}
while (pinakas[x][y]==0);

另请注意使用==,即comparisson,只需=即可。

最后,要将0放在数组的10个随机位置,你应该/可以这样做:

int x, y, i=0;
do
{
    x=rand()%3;
    y=rand()%10;
    if (pinakas[x][y]!=0) {
        pinakas[x][y]= 0;
        i++;
    }
}
while (i<10);

编辑:当你抱怨你只得到7个零(这是不可能的)时,按照完整的代码进行复制和粘贴:

int main(int argc, char *argv[]) 
{
    int i,j,x,y;
    int pinakas[3][10];
    for (i=0;i<3;i++)
    {
        for(j=0;j<10;j++)
        {
            pinakas[i][j]=1;
        }
    }
    i=0;
    do
    {
        x=rand()%3;
        y=rand()%10;
        if (pinakas[x][y]!=0) {
            pinakas[x][y]= 0;
            i++;
        }
    }
    while (i<10);
    x=0;
    for (i=0;i<3;i++)
    {
        for(j=0;j<10;j++)
        {
            printf("[%d,%d] = %d\n",i,j,pinakas[i][j]);
            if (pinakas[i][j]==0) x++;
        }
    }
    printf ("%d zeroes\n",x);
    return 0;
}

在我的系统上打印10。

答案 1 :(得分:0)

我已就你所犯的错误发表评论

for (i=0;i<10;i++){
   do{
    int x=rand()%2; //should be % 3
    int y=rand()%9; //should be % 10
   } while (pinakas[x][y]=0); //you need double equals for comparison
   pinakas[x][y]=0; //x an y are out of scope here
 }