Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > Интересные и занимательные задачи по программированию > Шахматная матрица логическим отрицанием


Автор: l0ser 18.8.2011, 03:18
Короче, мне тут мысля пришла: пусть есть квадратная матрица, заполненная нулями. А потом нужно сделать из неё шахматную свиноматрицу используя только логическое отрицание и только квадратными областями. (Есть здравые способы заполнения таких свиноматриц, щас не о них.)

Ну чего не взбредёт в голову в полчетвёртого ночи?.. Первые полминуты с того момента, как мне влезла в голову эта муть, мне казалось, что квадратами ну никак не получить шахматную матрицу, вторые полминуты мне казалось, что я придумал, как, а потом я уже набросал на баське прогу и целых пять минут отлаживал. Привожу аналог на C (мож, чего с индексами напортачил, переписывал в блокноте).

Вот в чём мой вопрос: какому <нецензурное выражение, обозначающее высшую степень умственной недоразвитости> кроме меня может понадобиться такой алгоритм?.. smile

Код

//объявления, заполнение...
#define MAX    10
...
int i, j, k;
bool matrix[MAX][MAX];

for (i = 0; i < MAX; ++i)
    for (j = 0; j < MAX; ++j)
        matrix[i][j] = false;

//собсно шахматная клетка

//квадраты с предпоследнего элемента свиноматрицы до первого
for (k = MAX - 2; k >= 0; --k)
    for (i = 0; i <= k; ++i)
        for (j = 0; j <= k; ++j)
            matrix[i][j] = !matrix[i][j];

//квадраты со второго элемента свиноматрицы до последнего
for (k = 1; k < MAX; ++k)
    for (i = k; i < MAX; ++i)
        for (j = k; j < MAX; ++j)
            matrix[i][j] = !matrix[i][j];


Хотел в «Лагоритмах» запостить, но вовремя увидел ссыль сюды, тут вроде более неформальное место, а там люди серьёзными темами заходят потрясти.

Автор: maxdiver 29.10.2011, 22:11
Не совсем понял, мы хотим получить из нулевой матрицы nxn шахматную матрицу, т.е. матрицу, в которой нули и единицы чередуются, как на шахматной доске? И при этом можем делать только инвертирование матрицы на каком-то квадрате?

Тогда, казалось бы, почему не сделать инвертирование в квадратах размера 1x1 в каждой клетке с нечётной суммой координат? Или предполагается, что надо минимизировать число таких инвертирований?

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)