我有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;
}
}
谢谢
答案 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 --;
}
}
可以优化。我会把它作为锻炼给你......