随机修改2d数组元素

时间:2013-12-01 19:12:53

标签: c++

我有2d数组(10x12),它们中有0和1。我想计算每个数组中的1,我在这里有两个案例:(1)如果一个数组有超过三个1s,比如说k很多,那么生成k - 3个随机变量,如果该随机变量用0替换那么多个1对应于1.(2)如果一个数组少于三个1s,比如说q many,则生成3-q随机变量,如果该随机变量对应于0则用1替换那么多0。我有以下代码所以远。我在这里需要一些建议,我无法很好地构建代码。

int y[10];
int r[10];

for(int i=0; i < 10; i++)
{          
    for(int j=0; j < 12; j++)
    {
        y[i] += Array[i][j]; 
    }

    if(y[i] > 3)
    {
        f = y[i] - 3;
        if(Array[i][r[f]] ==1)
            Array[i][r[f]] = 0;
    }

    if(y[i] < 3)
    {
        f = 3 - y[i];
        if(Array[i][r[f]] ==0)
            Array[i][r[f]] = 1;
    }
}

谢谢

1 个答案:

答案 0 :(得分:0)

这应该让你开始:

#define ROW                (10)
#define COL                (12)
#define NUM_ONES_THRESHOLD (3)

int numOnes = 0, elementsToModify, randRow, randCol;
bool toggleUp;

/* Count 1s */
for(int row = 0; row < ROW; row++)
{
    for(int col = 0; col < COL; col++)
        numOnes += Array[row][col];   
}

/* Determine How Many Elements To Modify */
if(numOnes > NUM_ONES_THRESHOLD)
{
    elementsToModify = numOnes - NUM_ONES_THRESHOLD;
    toggleUp = false;
}
else
{
    elementsToModify = NUM_ONES_THRESHOLD - numOnes;
    toggleUp = true;
}

/* Modify Table */
while(elementsToModify > 0)
{
    randRow = rand() % ROW;
    randCol = rand() % COL;

    if((Array[randRow][randCol] == 1) && !toggleUp)
    {
        Array[randRow][randCol] = 0;
        elementsToModify --;
    }

    if((Array[randRow][randCol] == 0) && toggleUp)
    {
        Array[randRow][randCol] = 1;
        elementsToModify --;
    }
}

可以优化。我会把它作为锻炼给你......