3 / 3 / 3
Регистрация: 06.02.2018
Сообщений: 66
1

Вывести квадратную матрицу на консоль в виде обратной спирали

11.04.2018, 07:48. Показов 1472. Ответов 1
Метки нет (Все метки)

Мне нужно вывести обратный спираль 10 11 7 6 5 9 13 14 15 16 12 8 4 3 2 1. Но я получаю нормальный спираль. Я подключил библиотеку,
чтобы она выводила массив в обратном порядке. Видимо что-то неправильно сделал. Но что именно?


C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
#include <iostream>
#include <stack>
 
void spiral (int ( &ARR )[4][4], int &right, int &bottom) {
    std::stack <int> mystack;
    int left = 0;
    int top1 = 0;
    int i;
 
        while(left <= right && top1 <= bottom) {
 
            for(i = left; i < right + 1; ++i) {
                mystack.push(ARR[top1][i]);
                std::cout << " " << mystack.top();
                mystack.pop();
            }
            ++top1;
            for(i = top1; i < bottom + 1; ++i) {
                mystack.push(ARR[i][right]);
                std::cout << " " << mystack.top();
                mystack.pop();
            }
            --right;
            for(i = right; i >= left; --i) {
                mystack.push(ARR[bottom][i]);
                std::cout << " " << mystack.top();
                mystack.pop();
            }
            --bottom;
            for(i = bottom; i >= top1; --i) {
                mystack.push(ARR[i][left]);
                std::cout << " " << mystack.top();
                mystack.pop();
            }
            ++left;
 
        }
    std::cout << std::endl;
 
}
 
int main() {
    std::stack <int> mystack;
    int right = 3;
    int bottom = 3;
    int arr[4][4];
    int k = 0;
    for(int i = 0; i < right + 1; ++i) {
        for(int j = 0; j < right + 1; ++j) {
            arr[i][j] = ++k;
//          std::cout << arr[i][j] << " ";
 
        }
    }
 
    spiral(arr, right, bottom);
 
return 0;
}
__________________
Помощь в написании контрольных, курсовых и дипломных работ, диссертаций здесь
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
11.04.2018, 07:48
Ответы с готовыми решениями:

Заполнить квадратную матрицу порядка N числами от 1 до N^2 по спирали и вывести в текстовый файл
Добрый день, друзья! У меня вот какой вопрос появился. Написал простейшую программу для создания...

Вывести на консоль квадратную матрицу, заполненную справа налево
нужно вывести вот такой двумерный массив: 6 5 4 3 2 1 12 11 10 9 8 7 18 17 16 15 14 13 24 23 22...

Вывести на консоль заданную квадратную матрицу в указанном порядке
2.Дана Матрица NxN(N четно) распечатать ее в указанном порядке. Вот тут довольно интересно. Была...

Заполнить квадратную матрицу по спирали
Одномерный: В заданном целочисленном массиве R(9) определить индекс наибольшего из нечетных по...

1
3 / 3 / 3
Регистрация: 06.02.2018
Сообщений: 66
19.04.2018, 09:19  [ТС] 2
Самостоятельно нашёл ответ на свой вопрос.

C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
#include <iostream>
#include <stack>
 
void spiral (int ( &ARR )[4][4], int &right, int &bottom) {
    std::stack <int> mystack;
    int left = 0;
    int top1 = 0;
    int i;
 
        while(left <= right && top1 <= bottom) {
 
            for(i = left; i < right + 1; ++i) {
        mystack.push(ARR[top1][i]);
            }
            ++top1;
            for(i = top1; i < bottom + 1; ++i) {
                mystack.push(ARR[i][right]);
        }
            --right;
            for(i = right; i >= left; --i) {
                mystack.push(ARR[bottom][i]);
            }
            --bottom;
            for(i = bottom; i >= top1; --i) {
                mystack.push(ARR[i][left]);
            }
            ++left;
 
        }
        while(!mystack.empty()) {
            std::cout << mystack.top() << " ";
            mystack.pop();
        }
    std::cout << std::endl;
}
 
int main() {
    std::stack <int> mystack;
    int right = 3;
    int bottom = 3;
    int arr[4][4];
    int k = 0;
    for(int i = 0; i < right + 1; ++i) {
        for(int j = 0; j < right + 1; ++j) {
            arr[i][j] = ++k;
        }
    }
 
    spiral(arr, right, bottom);
 
return 0;
}
1
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
19.04.2018, 09:19
Помогаю со студенческими работами здесь

Заполнить квадратную матрицу по спирали
Квадратную матрицу размерности N ( N - нечетное число) заполнить числами от 1 до N2 по спирали от...

Заполнить квадратную матрицу по спирали
Cоставить программу, которая заполняет квадратную матрицу порядка n нaтуральными числами...

Заполнить квадратную матрицу по спирали
Здесь была ссылка куда-то далеко.

Заполнить квадратную матрицу по спирали
Составить программу, которая заполняет квадратную матрицу порядка n натуральными числами 1, 2, 3,...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
2
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2023, CyberForum.ru