2013-12-01 3 views
1

У меня есть 2d массив (10x12), и у них есть 0 и 1s в них. Я хочу подсчитать 1s в каждом массиве, и у меня есть два случая: (1) если массив имеет более трех 1s, скажем k many, то сгенерируйте k - 3 случайные величины и замените, что много 1s с 0s, если эта случайная величина соответствует 1. (2), если массив имеет меньше трех 1s, скажем q many, затем генерирует 3 - q случайных величин и заменяет множество 0s на 1s, если эта случайная величина соответствует 0. У меня есть следующий код, поэтому далеко. Мне нужны некоторые предложения здесь, я не мог хорошо построить код.2-я модификация элемента массива случайным образом

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

Это должно начать Вас:

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

Это может быть оптимизировано. Я оставлю это как упражнение для вас ...

+0

Спасибо за вашу помощь, я буду работать над этим – user2147241

Смежные вопросы