Задача с двумерными массивами С++

235
28 ноября 2017, 22:40

В общем ребят, есть задача с двумерными массивами. Условие : расставить на шахматном поле 2 белых и 2 черных слона произвольным образом и определить, какие черные слоны находятся под ударом белых. Мой говно-код для одного белого слона ( для начала хотя бы с ним разобраться, затем копирнуть для второго ) :

#include "stdafx.h"
#include <iostream>
#include <ctime>
using namespace std;
int main()
{
    srand(time(NULL));
    const int n = 8;
    int a[n][n];
    int y[4], x[4];
    cout << "Here we go, there is chess desk, 0 - white figures, 1 - black figures, 6 - white elephant, 9 - black elephant\n";
    for (int i = 0; i < n; i++) {

        for (int j = 0; j < n; j++) {
            a[i][j] = rand() % 2;
            cout << a[i][j];
            cout << "  ";
        }
        cout << endl;
    }
    cout << endl << endl;
    for (int i = 0; i < 4; i++)
    {
        y[i] = rand() % 8;
        x[i] = rand() % 8;
        cout << "X IS" << "\t\t" << "Y IS" << "\t" << "Count from zero!!!" << endl;
        cout << y[i] << "\t\t" << x[i] << endl;
    }
    a[x[0]][y[0]] = 6;
    a[x[1]][y[1]] = 6;
    a[x[2]][y[2]] = 9;
    a[x[3]][y[3]] = 9;
    cout << endl;
    for (int i = 0; i < n; i++) {

        for (int j = 0; j < n; j++) {
            cout << a[i][j];
            cout << "  ";
        }
        cout << endl;
    }
    for (int i = x[0]; i < n && i >= 0; i--) {
        for (int j = y[0]; j < n && j >= 0; j--) {
            if (a[i][j] == 9) {
                cout << "One black elephant is on the way" << endl;
            }
            if (j--)
                break;
        }
    }
    for (int i = x[0]; i < n && i >= 0; i++) {
        for (int j = y[0]; j < n && j >= 0; j++) {
            if (a[i][j] == 9) {
                cout << "One black elephant is on the way" << endl;
            }
            if (j++)
                break;
        }
    }
    for (int i = x[0]; i < n && i >= 0; i++) {
        for (int j = y[0]; j < n && j >= 0; j--) {
            if (a[i][j] == 9) {
                cout << "One black elephant is on the way" << endl;
            }
            if (j--)
                break;
        }
    }
    for (int i = x[0]; i < n && i >= 0; i--) {
        for (int j = y[0]; j < n && j >= 0; j++) {
            if (a[i][j] == 9) {
                cout << "One black elephant is on the way" << endl;
            }
            if (j++)
                break;
        }
    }
    system("pause");
    return 0;
}

После долгих раздумий что же не так я накоец осознал, что скорее всего проблема в этом :

if (j++)
    break;

Координата по y смещается 1 раз и застывает. Нужно придумать так, чтобы каждый цикл выполнялся по одному разу пока удовлетворяет условию. То есть производил проверку по диагонали. Нет идей, как это реализовать.

READ ALSO
Присвоение значения переменной в c++ переданной по указателю

Присвоение значения переменной в c++ переданной по указателю

Как с помощью конструктора копирования из string присвоить значению, на которое ссылается temp, значение m?

196
List C++ Удаление конкретного элемента List

List C++ Удаление конкретного элемента List

Нужно удалить второй элемент из listВсе работает как надо

196
Структурирование данных JAVA

Структурирование данных JAVA

Необходимо реализовать программу, в которой будут использоваться все модификаторы доступы - private, default, protected, public на трех уровнях наследованияТакже...

217
Потоки.InputStream.Java.Как работать с данными

Потоки.InputStream.Java.Как работать с данными

Есть архив в нем набор файлов, надо считать файлы из архива и выборочно брать один из них, разархивировать архив на диск не нужно, хотел подгружать...

428