как можно сделать проверку через цикл?

232
09 декабря 2021, 18:40
  • Двухмерный массив из 3 строк и 3 столбцов заполнить 0 и 1, это будет результат игры в крестики-нолики.
  • Вывести «да», если игра закончилась победой крестиков. можно конечно сделать 8 проверок через if else, но можно ли сделать это как то через цикл?
   void main()
   {
       using namespace std;
       const int a = 3;
       const int b = 3;
       int an[a][b];
       for (int i = 0; i < a; i++)
       {
           for (int j = 0; j < b; j++)
           {
               an[i][j] = rand() % 2;
           }
       }
       for (int i = 0; i < a; i++)
       {
           for (int j = 0; j < b; j++)
           {
               cout<< an[i][j];
           }
           cout<< endl;
       }
   }
Answer 1
void main()
{
    int a = 0, b = 0, X, N;
    bool fl = true;
    for (int i = 0; fl && i < n; i++) // в этом цикле проверка по строкам
    {
        X = 0, N = 0;
        for (int j = 0; fl && j < n; j++) {
            if (x[i][j] == 2)
                X++; // если в строке встретился нолик то переменную X увеличиваем на 1
            if (x[i][j] == 1)
                N++; //если в строке встретился крестик то переменную N увеличиваем на 1
        }
        if (X == 2 && N == 0) // если в строке два нолика и нет крестиков (т.е. мы рассматриваем не только два рядом стоящих нолика, но и через одну свободную клетку)
        {
            fl = false;
            for (int j = 0; j < n; j++)
                if (x[i][j] == 0)
                    x[i][j] = 2; // то вычисляем, где свободная клетка и ставим туда нолик
        }
    }
    for (i = 0; fl && i < n; i++) //в этом цикле аналогичная проверка по столбцам
    {
        X = 0, N = 0;
        for (int j = 0; fl && j < n; j++) {
            if (x[j][i] == 2)
                X++;
            if (x[j][i] == 1)
                N++;
        }
        if (X == 2 && N == 0) {
            fl = false;
            for (int j = 0; j < n; j++)
                if (x[j][i] == 0)
                    x[j][i] = 2;
        }
    }
    X = 0, N = 0;
    for (i = 0; fl && i < n; i++) // здесь идет похожая проверка по главной диагонали
    {
        if (x[i][i] == 2)
            X++;
        if (x[i][i] == 1)
            N++;
    }
    if (X == 2 && N == 0) {
        fl = false;
        for (int i = 0; i < n; i++)
            if (x[i][i] == 0)
                x[i][i] = 2;
    }
    X = 0, N = 0;
    for (i = 0; fl && i < n; i++) // здесь идет похожая проверка по побочной диагонали
    {
        if (x[2 - i][i] == 2)
            X++;
        if (x[2 - i][i] == 1)
            N++;
    }
    if (X == 2 && N == 0) {
        fl = false;
        for (int i = 0; i < n; i++)
            if (x[2 - i][i] == 0)
                x[2 - i][i] = 2;
    }
    //
    for (i = 0; fl && i < n; i++) //если вышеперечисленных вариантов нет, то ищем нолик с пустой рядом клеткой и ставим туда нолик
        for (int j = 0; fl && j < n; j++)
            if (x[i][j] == 2) {
                if (i > 0 && x[i - 1][j] == 0) // здесь проверка верхней клетки на то что она свободна и если она свободна то ставим туда нолик
                {
                    fl = false;
                    x[i - 1][j] = 2;
                }
                else if (j > 0 && x[i][j - 1] == 0) // здесь проверка левой клетки на то что она свободна и если она свободна то ставим туда нолик
                {
                    fl = false;
                    x[i][j - 1] = 2;
                }
                else if (i < 2 && x[i + 1][j] == 0) // здесь проверка нижней клетки на то что она свободна и если она свободна то ставим туда нолик
                {
                    fl = false;
                    x[i + 1][j] = 2;
                }
                else if (j < 2 && x[i][j + 1] == 0) // здесь проверка правой клетки на то что она свободна и если она свободна то ставим туда нолик
                {
                    fl = false;
                    x[i][j + 1] = 2;
                }
                else if (i > 0 && j > 0 && x[i - 1][j - 1] == 0) // здесь проверка левой верхней клетки на то что она свободна и если она свободна то ставим туда нолик
                {
                    fl = false;
                    x[i - 1][j - 1] = 2;
                }
                else if (i > 0 && j < 2 && x[i - 1][j + 1] == 0) // здесь проверка правой верхней клетки на то что она свободна и если она свободна то ставим туда нолик
                {
                    fl = false;
                    x[i - 1][j + 1] = 2;
                }
                else if (i < 2 && j < 2 && x[i + 1][j + 1] == 0) // здесь проверка нижней правой клетки на то что она свободна и если она свободна то ставим туда нолик
                {
                    fl = false;
                    x[i + 1][j + 1] = 2;
                }
                else if (i < 2 && j > 0 && x[i + 1][j - 1] == 0) // здесь проверка нижней левой клетки на то что она свободна и если она свободна то ставим туда нолик
                {
                    fl = false;
                    x[i + 1][j - 1] = 2;
                }
            }
    if (fl) // если нет и такого варианта, то выбираем место очередному нолику с помощью rand()
    {
        for (int i = 0; i < n; i++)
            for (int j = 0; j < n; j++)
    }
READ ALSO
Как сравнить значения из вектора структур

Как сравнить значения из вектора структур

Всем еще раз здрасте)Сейчас попробую более дитально описать проблему

206
Вычисление суммы ряда

Вычисление суммы ряда

мне нужно сделать код так, чтобы получился пример под цифрой 2 но код я смог сделать только так, что у меня получается пример под цифрой 1 Как...

239
Сортировка массива объектов по string полю

Сортировка массива объектов по string полю

Есть такой класс администратора

70