@432ffqfw

Где ошибка в коде переворота двумерного массива?

Код программы
#include <iostream>
using namespace std;
int main() {
    int a, b, c = 0;
    cin >> a >> b;
    int A[a][b];
    for(int y = 0; y<a; ++y) {
        for (int x = 0; x < b; ++x) {
            cin >> A[y][x];
        }
    }
    for(int y = 0, y1 = a - 1; y<=y1; ++y, --y1) {
        for (int x = 0, x1 = b - 1; x<b; ++x, --x1) {
            int k = A[y][x];
            A[y][x] = A[y1][x1];
            A[y1][x1] = k;
        }
    }
    for(int y = 0; y<a; ++y) {
        for (int x = 0; x < b; ++x) {
            cout << A[y][x] << ' ';
        }
        cout << endl;
    }
}

При вводе массива с нечетным количеством строк, "средняя" строка не переворачивается. Что я сделал не так?
Вот вывод:
3 3 
1 2 3
4 5 6 
7 8 9
9 8 7 
4 5 6 // тут нужно 6 5 4
3 2 1
  • Вопрос задан
  • 60 просмотров
Решения вопроса 2
wataru
@wataru Куратор тега C++
Разработчик на С++, экс-олимпиадник.
У вас средняя строка 2 раза переворачивается. Потому что цикл внутри проходит по всей длине строки и меняет местами 2 элемента. Первую половину итераций строка будет переворачиваться, а вторю половину - переворачиваться обратно.

Надо отдельно обработать случай y == y1
Ответ написан
Комментировать
@dima20155
you don't choose c++. It chooses you
Что-то много у тебя лишнего в коде

#include <iostream>

using namespace std;

int main() {
    int a = 0, b = 0, c = 0;
    cin >> a >> b;
    int A[a*b]; // not all compilers support this you have to make sure or use new/unique_ptr
    for (int i = 0; i < a*b; ++i) {
        cin >> A[i];
    }

    for (int i = 0; i < a*b / 2; ++i) {
        std::swap(A[i], A[a*b - 1 - i]);
    }

    for (int i = 0; i < a*b; ++i) {
        if ((i) % b == 0)
            std::cout << std::endl;
        std::cout << A[i] << " ";
    }
}

ссылка на поиграться
https://godbolt.org/z/xqf6MYaMK
Ответ написан
Комментировать
Пригласить эксперта
Ответы на вопрос 1
mayton2019
@mayton2019
Bigdata Engineer
Ну и хомутов ты тут повесил. Проверь что она переворачивается два раза.
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы