随机修改二维数组元素

2d array element modification randomly

本文关键字:二维 数组元素 修改 随机      更新时间:2023-10-16

我有2d数组(10x12),其中有0和1。我想计算每个数组中的1,这里有两种情况:(1)如果一个数组有三个以上的1,比如说k个,那么生成k-3个随机变量,如果该随机变量对应于1,那么用0替换这个多个1。(2) 如果一个数组少于三个1,比如说q个,那么生成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;
    }
}

感谢

这应该会让你开始:

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

它可以进行优化。我把它留给你练习。。。