c ++ программа для вращения матрицы - PullRequest
1 голос
/ 17 июня 2019

Пожалуйста, прости меня, если мой вопрос не очень хороший, я здесь новенький

Задание: Повернуть данную матрицу на 180 градусов

Введите:

1
4
1 2 3 4
5 6 7 8
9 10 11 12
13 14 15 16

Выход:

16 15 14 13
12 11 10 9
8  7  6 5
4 3 2 1

Что я уже пробовал

#include <iostream>
using namespace std;

int main() {
    int t;
    cin >> t;
    while (t--) {
        int n;
        cin >> n;
        int a[15][15];
        for (int i = 0; i < n; i++)
            for (int j = 0; j < n; j++)
                cin >> a[i][j];
        for (int i = 0; i < n; i++) {
            int p = n - 1;
            for (int j = 0; j <= (n - 1) / 2; j++)
                swap(a[i][j], a[i][p--]);
        }
        for (int j = 0; j < n; j++) {
            int p = n - 1;
            for (int i = 0; i < (n - 1) / 2; i++)
                swap(a[i][j], a[p--][j]);
        }
        cout << "checking if printing all row or not" << endl;
        for (int i = 0; i < n; i++) {
            for (int j = 0; j < n; j++) {
                cout << a[i][j] << " ";
            }
            cout << endl;
        }
    }
    return 0;
}

Сбой при тестировании

Введите:

10

    220 892 951 241 739 884 66 815 904 660

    85 784 379 346 598 873 716 535 422 902

    579 872 41 870 827 406 910 583 349 896

    771 817 361 591 212 74 199 421 820 176

    496 771 558 954 889 628 126 250 58 156

    683 88 339 58 436 176 57 459 22 394

    43 280 839 618 688 573 493 178 941 504

    420 676 888 935 95 593 616 833 115 210

    339 798 694 515 7 831 103 947 992 724

    195 904 864 51 174 980 960 4 974 509

Правильный вывод:

    509 974 4 960 980 174 51 864 904 195

    724 992 947 103 831 7 515 694 798 339

    210 115 833 616 593 95 935 888 676 420

    504 941 178 493 573 688 618 839 280 43

    394 22 459 57 176 436 58 339 88 683

    156 58 250 126 628 889 954 558 771 496

    176 820 421 199 74 212 591 361 817 771

    896 349 583 910 406 827 870 41 872 579

    902 422 535 716 873 598 346 379 784 85

    660 904 815 66 884 739 241 951 892 220

И онлайн-судья говорит, что

А вывод вашего кода:

509 974 4 960 980 174 51 864 904 195

724 992 947 103 831 7 515 694 798 339

210 115 833 616 593 95 935 888 676 420

504 941 178 493 573 688 618 839 280 43

156 58 250 126 628 889 954 558 771 496

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

для ограничения ввода-вывода: Вопрос Ссылка

1 Ответ

0 голосов
/ 17 июня 2019
for (int j = 0; j < n; j++) {
            int p = n - 1;
            for (int i = 0; i < (n - 1) / 2; i++)
                swap(a[i][j], a[p--][j]);
        }

В указанном выше внутреннем цикле for вы пропустили "<=". Так и должно быть </h2> for (int i = 0; i <= (n - 1) / 2; i++) Весь ваш код будет #include <iostream> using namespace std; int main() { int t; cin >> t; while (t--) { int n; cin >> n; int a[15][15]; for (int i = 0; i < n; i++) for (int j = 0; j < n; j++) cin >> a[i][j]; for (int i = 0; i < n; i++) { int p = n - 1; for (int j = 0; j <= (n - 1) / 2; j++) swap(a[i][j], a[i][p--]); } for (int j = 0; j < n; j++) { int p = n - 1; for (int i = 0; i <= (n - 1) / 2; i++) swap(a[i][j], a[p--][j]); } cout << "checking if printing all row or not" << endl; for (int i = 0; i < n; i++) { for (int j = 0; j < n; j++) { cout << a[i][j] << " "; } cout << endl; } } return 0; }

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