Форум программистов, компьютерный форум, киберфорум
С++ для начинающих
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.87/76: Рейтинг темы: голосов - 76, средняя оценка - 4.87
0 / 0 / 0
Регистрация: 25.02.2016
Сообщений: 2

Заполнить квадратную матрицу числами по спирали

25.02.2016, 18:42. Показов 14860. Ответов 6
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Задача B. Спираль

В этой задаче вам необходимо вывести квадрат, состоящий из NxN клеток, заполненных числами от 1 до N2 по спирали (см. примеры).
Формат входных данных
Во входном потоке находится единственное число N (2 ≤ N ≤ 100).
Формат выходных данных
В выходной поток выведите N строк по N чисел, разделённых пробелами. Не допускается начинать спираль в ином, кроме верхнего левого, углу, закручивать спираль против часовой стрелки или изнутри наружу.
0
Programming
Эксперт
39485 / 9562 / 3019
Регистрация: 12.04.2006
Сообщений: 41,671
Блог
25.02.2016, 18:42
Ответы с готовыми решениями:

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

Заполнить заданную квадратную матрицу по спирали числами 0 и 1
Всем привет! Поставили передо мной следующую задачу: Написать программу, которая заполняет матрицу NxN (1 <= N <= 50) числами 1 и...

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

6
 Аватар для rao
903 / 424 / 159
Регистрация: 02.04.2014
Сообщений: 1,206
25.02.2016, 19:15
Примеров не видно ваще ни разу.

Поэтому чота я не понял: допустим "входной поток" дает нам число 3. Значит надо вывести квадрат 3х3 с девятью числами от 1 до 6. Так? Т.е. числа будут дробные. С шагом = 6/9 = 2/3 = 0.(6)
Вот, готово:

1.00 1.66 2.33
5.66 6.00 3.00
5.00 4.33 3.66
0
Вездепух
Эксперт CЭксперт С++
 Аватар для TheCalligrapher
12928 / 6796 / 1819
Регистрация: 18.10.2014
Сообщений: 17,193
25.02.2016, 21:38
Цитата Сообщение от onilic Посмотреть сообщение
(см. примеры).
И? Где "примеры"?
0
518 / 410 / 188
Регистрация: 08.04.2013
Сообщений: 1,750
26.02.2016, 01:34
не квадратный, прямоугольный сойдет, разбирайся
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
#include <iomanip>
#include <iostream>
using namespace std;
 
int main() {
int n,m, c = 0, i, j, **a;
cout << "n? "; cin >> n;
cout << "m? "; cin >> m;
a = new int *[n];
for (i = 0; i < n; ++i) a[i] = new int[m];
 
int  ost=n;
if (ost>m) {   ost=m;}
 
for (i = 0; i < ost / 2; ++i) {
for (j = i; j < m - i - 1; ++j) a[i][j] = ++c;
for (j = i; j < n - i - 1; ++j) a[j][m - i - 1] = ++c;
for (j = i; j < m - i - 1; ++j) a[n - i - 1][m - j - 1] = ++c;
for (j = i; j < n - i - 1; ++j) a[n - j - 1][i] = ++c;
}
//if (n % 2) a[n / 2][m / 2] = ++c;
// если есть остаток то
if (ost%2==1) { 
    ++j;
   if (n<m) { for (j = i; j < m - i ; ++j) a[i][j] = ++c;}
   else     { for (j = i; j < n - i ; ++j) a[j][m - i - 1] = ++c;
   }
}
 
for (i = 0; i < n; ++i) {
for (j = 0; j < m; ++j) cout << setw(3) << a[i][j] << ' ';
cout << endl;
}
 
    for(int i = 0; i < n; ++i)
        delete[] a[i];
    delete[] a;
 
}
Добавлено через 19 минут
или так замутить можно
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
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
#include <iostream>
#include <clocale>
#include <windows.h>
 
using namespace std;
 
int ch;
int ii;
//----- объявление прототипов используемых функций-----------------
int** Create(int n,int m);           // создание матрицы n строк m столбцов
void Free(int** M,int n);             // освобождение матрицы
//void Input(int** M,int n,int m);   // ввод матрицы
void Print(int** M,int n,int m);     // вывод матрицы
 
//--------------------------------------------------------------------------
 
void spROW(int** M,int n,int m,int nach,int kon,int col,int row,int napr);
void spCOL(int** M,int n,int m,int nach,int kon,int col,int row,int napr);
//void spROW(int** M,int n,int m);    // обработка матрицы
//--------------------------------------------------------------------------
 
//----------  main() -  точка входа в программу консольного приложения 
int main()
{
    setlocale(LC_ALL,"Rus");
    int n,m;
    cout<<"Количество строк матрицы:?";
    cin>>n;
    cout<<"Количество столбцов матрицы:?";
    cin>>m;
    int** A=Create(n,m);
  int  ost=n;
   if (ost>m) {   ost=m;}
  //  Input(A,n,m);
    for(int i=0;i<ost/2;i++){
    spROW(A,n,m,i,   m-i,   i,          0,      0);
    spCOL(A,n,m,i,   n-i,   0,          m-i-10);
    spROW(A,n,m,i,   m-i,   n-i-1 ,     0,      1);
    spCOL(A,n,m,i,   n-i,   0,          i,      1);
    ii=i;
    }
// если есть остаток то
if (ost%2==1) {
    ii++;
   if (n<m) { spROW(A,n,m,ii,    m-ii+1,    ii,     0,      0);}
   else     { spCOL(A,n,m,ii,    n-ii+1,    0,      m-ii-1, 0);
   }
}
//------------------------------------------------------------    
    Print(A,n,m);
    Free(A,n);
    system("pause");
    return 0;
}
 
//----   описание функций -----------------------------------------
int** Create(int n,int m)
{
    int** M=new int*[n];
    for(int i=0;i<n;i++)
    {
        M[i]=new int[m];
    }
    return M;
}
//----------------------------
void Free(int** M,int n)
{
    for(int i=0;i<n;i++)
        delete[] M[i];
    delete[] M;
}
//----------------------------
/*void Input(int** M,int n,int m)
{
    for(int i=0;i<n;i++)
    {
        for(int j=0;j<m;j++)
        {
            cout<<"M["<<i<<"]["<<j<<"]=?";
            cin >> M[i][j];
        }
    
    }
}*/
//----------------------------
void Print(int** M,int n,int m)
{
    for(int i=0;i<n;i++)
    {
        for(int j=0;j<m;j++)
        { cout.width(3);
            cout << M[i][j] ;
        }
        cout << endl;
    }
}
// Меняет местами строки
void spROW(int** M,int n,int m,int nach,int kon,int col,int row,int napr)
{
 // n- начало k  - конец col столбец row - строка napr - направление
switch (napr){
    case 0: for (row=nach;row<kon-1;row++) {
        M[col][row]=++ch;
    }   
        break;
 
    case 1: for (row=kon-1;row>nach;row--) {
        M[col][row]=++ch;
    } 
        break;
}
}
        
void spCOL(int** M,int n,int m,int nach,int kon,int col,int row,int napr)
{
 // n- начало k  - конец col столбец row - строка napr - направление
switch (napr){
    case 0: for (col=nach;col<kon-1;col++) {
        M[col][row]=++ch;
    }   
        break;
 
    case 1: for (col=kon-1;col>nach;col--) {
        M[col][row]=++ch;
    } 
        break;
}
}
0
181 / 47 / 33
Регистрация: 27.02.2016
Сообщений: 260
27.02.2016, 19:03
Вот, попробовал самостоятельно код составить:
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
#include <iostream>
using namespace std;
int main() {    
    setlocale(LC_ALL, "Russian");
    void matrics(int num);
    int size;
    cout << "Веди размеронсть(от 1 до 100): ";
    cin >> size;
    matrics(size-1);
    system("pause");
    return 0;
}
void matrics(int num) {
    int matric[100][100];
    int i, k = 1, c = 1, j = 0, number;
    number = num;
//Заполнение матрицы против часовой стрелки начиная с левого верхнего угла
        for (i = 0; i <= number; i++){
        matric[i][0] = k;
        k = k++;
        } 
            do {
                for (i = c; i <= number; i++) 
                    { matric[number][i] = k; k = k++; }
                for (i = 1; i <= number-c+1; i++)
                    { matric[number - i][number] = k; k = k++; }
                for (i = 1; i <= number - c; i++) 
                    { matric[j][number - i] = k; k = k++; }
                for (i = c; i <= number - 1; i++) 
                    { matric[i][j + 1] = k; k = k++; }
                number = number - 1;
                j = j++;
                c = c++;
            }
                while (j!=int(((num)/2)+1));
//Ввывод матрицы
    for (i = 0; i <= num; i++) {
        cout << "\n";
        for (j = 0; j <= num; j++) {
            if (matric[i][j] > 0 && matric[i][j] < 10) 
                cout << "   " << matric[i][j];
            if (matric[i][j] > 9 && matric[i][j] < 100) 
                cout << "  " << matric[i][j];
            if (matric[i][j] >= 100) 
                cout << " " << matric[i][j];
        }
    }
    cout << "\n\n";
}
0
0 / 0 / 1
Регистрация: 09.11.2014
Сообщений: 17
29.03.2016, 22:31
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
#include <iostream>
using namespace std;
int main()
{
    int n, ZN=0;
    cin>>n;
    int a[n][n];
    int stop = (n % 2 == 0) ? n/2 : n/2+1;
 
    for(int i=0;i<stop;i++){
        for(int j=i;j<n-i;j++) //вправо
            a[i][j]=++ZN;
        for(int j=i+1;j<n-i;j++) //вниз
            a[j][n-i-1]=++ZN;
        for(int j=i+1;j<n-i;j++) //влево
            a[n-i-1][n-j-1]=++ZN;
        for(int j=i+1;j<n-i-1;j++) //вверх
           a[n-j-1][i]=++ZN;       
    }
 
    for(int i=0;i<n;i++){
        for(int j=0;j<n;j++){
            cout<<a[i][j]<<' ';
        }
        cout<<endl;
    }
 
    return 0;
}
Изображения
 
0
1615 / 1181 / 552
Регистрация: 08.01.2012
Сообщений: 4,558
30.03.2016, 00:09
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
void print(int **a, int n)
{
    int w;
    w=(n<10)?3:4;
    for(int i=0; i<n; i++, cout<<endl)
    for(int j=0; j<n; j++) 
    {
        cout.width(w);
        cout<<a[i][j];
    }
}
void main()
{
    int n;
    do
    {
        cout<<"N: ";
        cin>>n;
    }while(n<2 || n>100);
    int **a=new int*[n];
    for(int i=0; i<n; i++) a[i]=new int[n];
    int dr[]={0,1,0,-1};
    int dc[]={1,0,-1,0};
    int l=n-1, r=0, c=0;
    for(int i=0; i<n*n;)
    {
        for(int j=0; j<4 && i<n*n; j++)
        for(int k=0; k<l; k++)
        {
            a[r][c]=++i;
            if(j!=3 || k<l-1)
            {
                r+=dr[j];
                c+=dc[j];
            }
        }
        c++;
        l-=(l-2)?2:1;
    }
    if(n<20) print(a, n);
    for(int i=0; i<n; i++) delete[] a[i];
    delete[] a;
    system("pause");
}
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
inter-admin
Эксперт
29715 / 6470 / 2152
Регистрация: 06.03.2009
Сообщений: 28,500
Блог
30.03.2016, 00:09
Помогаю со студенческими работами здесь

Заполнить квадратную матрицу порядка n по спирали
Прошу оказать содействие с написанием кода Задача: Заполнить квадратную матрицу порядка n по спирали по часовой стрелке начиная с...

Заполнить целочисленную квадратную матрицу по спирали
Получить целочисленную квадратную матрицу порядка 2n+1, элементами которой являются числа 1, 2, 3, ... , (2*n + 1), расположенные в...

Заполнить квадратную матрицу размером N x N по спирали
Заполнить квадратную матрицу размером N x N по спирали (N – нечётное число). Число 1 ставится в центр матрицы, а затем массив...

Заполнить квадратную матрицу по спирали по часовой стрелке
Нужно составить программу, которая заполняет квадратную матрицу порядка n натуральными числами 1, 2, 3, ... n, записывая их в нее &quot;по...

Заполнить квадратную матрицу от левого верхнего угла по спирали
Заполнить матрицу А(9,9), от левого верхнего угла по спирали: вправо - вниз - влево - вверх.


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

Или воспользуйтесь поиском по форуму:
7
Ответ Создать тему
Новые блоги и статьи
Thinkpad X220 Tablet — это лучший бюджетный ноутбук для учёбы, точка.
Programma_Boinc 23.12.2025
Thinkpad X220 Tablet — это лучший бюджетный ноутбук для учёбы, точка. Рецензия / Мнение/ Перевод Сайт называется reddit: The Thinkpad X220 Tablet is the best budget school laptop period. Это. . .
PhpStorm 2025.3: WSL Terminal всегда стартует в ~
and_y87 14.12.2025
PhpStorm 2025. 3: WSL Terminal всегда стартует в ~ (home), игнорируя директорию проекта Симптом: После обновления до PhpStorm 2025. 3 встроенный терминал WSL открывается в домашней директории. . .
Как объединить две одинаковые БД Access с разными данными
VikBal 11.12.2025
Помогите пожалуйста !! Как объединить 2 одинаковые БД Access с разными данными.
Новый ноутбук
volvo 07.12.2025
Всем привет. По скидке в "черную пятницу" взял себе новый ноутбук Lenovo ThinkBook 16 G7 на Амазоне: Ryzen 5 7533HS 64 Gb DDR5 1Tb NVMe 16" Full HD Display Win11 Pro
Музыка, написанная Искусственным Интеллектом
volvo 04.12.2025
Всем привет. Некоторое время назад меня заинтересовало, что уже умеет ИИ в плане написания музыки для песен, и, собственно, исполнения этих самых песен. Стихов у нас много, уже вышли 4 книги, еще 3. . .
От async/await к виртуальным потокам в Python
IndentationError 23.11.2025
Армин Ронахер поставил под сомнение async/ await. Создатель Flask заявляет: цветные функции - провал, виртуальные потоки - решение. Не threading-динозавры, а новое поколение лёгких потоков. Откат?. . .
Поиск "дружественных имён" СОМ портов
Argus19 22.11.2025
Поиск "дружественных имён" СОМ портов На странице: https:/ / norseev. ru/ 2018/ 01/ 04/ comportlist_windows/ нашёл схожую тему. Там приведён код на С++, который показывает только имена СОМ портов, типа,. . .
Сколько Государство потратило денег на меня, обеспечивая инсулином.
Programma_Boinc 20.11.2025
Сколько Государство потратило денег на меня, обеспечивая инсулином. Вот решила сделать интересный приблизительный подсчет, сколько государство потратило на меня денег на покупку инсулинов. . . .
Ломающие изменения в C#.NStar Alpha
Etyuhibosecyu 20.11.2025
Уже можно не только тестировать, но и пользоваться C#. NStar - писать оконные приложения, содержащие надписи, кнопки, текстовые поля и даже изображения, например, моя игра "Три в ряд" написана на этом. . .
Мысли в слух
kumehtar 18.11.2025
Кстати, совсем недавно имел разговор на тему медитаций с людьми. И обнаружил, что они вообще не понимают что такое медитация и зачем она нужна. Самые базовые вещи. Для них это - когда просто люди. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2025, CyberForum.ru