Как запустить 2D-массив, который содержит 3 значения, и выполнить проверку значений? - PullRequest
0 голосов
/ 24 апреля 2011

Хорошо, так что я действительно думаю, что переборщил с этим, но я программировал в течение 48 часов подряд, и мой разум исчез.Справочная информация: с помощью Visual Studio 2010, создание консольного приложения с использованием C ++.У меня были проблемы с логикой, и я застрял в следующем:

У меня есть двумерный массив 8 x 8, матрица [8] [8].Этот массив содержит 0, 1 и 2.Теперь, когда программа выполняется, массив заменяет 1 или 2 на 0.Так как он работает, я хочу проверить, не удалил ли массив все 1 или 2.Поэтому, если есть только 0 и 1, я хочу создать сообщение, в котором говорится что-то вроде «ваш массив больше не содержит 2» и наоборот, если есть только 0 и 2.

Вот код, о котором я думалиспользуя:

for(row = 0; row < 8; row++)
{
    for (col = 0; col < 8; col++)
    {
        if(matrix[row][col] != 1){
            cout<<"message"<<endl; }

        else if(matrix[row][col] != 2){
            cout<<"message"<<endl; }
    }
}

Теперь моя проблема в том, что если массив содержит [0, 1, 2, 0], он будет проходить и проверять первый элемент, и он не будет содержать 1 или 2Некоторые идеи относительно того, что я мог бы сделать, пожалуйста?

Ответы [ 4 ]

1 голос
/ 24 апреля 2011

Вы не можете решить это внутри цикла.Вы узнаете результат только после прохождения всей матрицы:

bool hasOnes = false;
bool hasTwos = false;
for(row = 0; row < 8; row++)
{
    for (col = 0; col < 8; col++)
    {
        if(matrix[row][col] == 1) {
          hasOnes = true;
        } else if(matrix[row][col] == 2){
          hasTwos = true;
        }
}

if (hasOnes && !hasTwos)
  cout << "You have removed twos" << endl;
if (hasTwos && !hasOnes)
  cout << "You have removed ones" << endl;
0 голосов
/ 24 апреля 2011
int count[3] = {0,0,0};
for (int i = 0; i < 64; i++) count[*(matrix + i)]++;

if (count[0] + count[1] == 64) cout<<"No 2s exist"<<endl;
if (count[0] + count[2] == 64) cout<<"No 1s exist"<<endl;

Редактировать
Это может быть немного быстрее

int count[3] = {0,0,0};
for (int i = 0; i < 64; i++) 
     if (!count[1] && !count[2]) count[*(matrix + i)]++;
     else break;

if (count[0] + count[1] == 64) cout<<"No 2s exist"<<endl;
if (count[0] + count[2] == 64) cout<<"No 1s exist"<<endl;
0 голосов
/ 24 апреля 2011

Предполагая, что у только будет 0-2 в каждом элементе массива: int vals = 0; for (int row = 0; row <8; row ++) для (int col = 0; col <8; col ++) { vals | = matrix [row] [col]; if (vals == 3) перерыв; } if (vals & 1) cout << "Матрица содержит 1" << endl; if (vals & 2) cout << "Матрица содержит 2" << endl; </p>

0 голосов
/ 24 апреля 2011

Я бы посоветовал вам выполнить итерацию по матрице и сосчитать все элементы следующим образом:

int counts[3];
for(i = 0; i < 3; i++)
{
    counts[i] = 0;
}
for(row = 0; row < 8; row++)
{
    for (col = 0; col < 8; col++)
    {
        counts[matrix[row][col]]++;
    }
}

Получив это, вы можете просто проверить counts[1], чтобы увидеть количество единиц в матрице,Кроме того, если вы итеративно заменяете значения, вы можете избежать повторной проверки полной матрицы после каждой итерации.Вы можете изменить количество при изменении матрицы.

...