С Новым годом! Форум программистов, компьютерный форум, киберфорум
C для начинающих
Войти
Регистрация
Восстановить пароль
Карта форума Темы раздела Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.86/22: Рейтинг темы: голосов - 22, средняя оценка - 4.86
0 / 0 / 0
Регистрация: 20.03.2019
Сообщений: 4
1

Заполнение матрицы по спирали по часовой стрелке

21.03.2019, 20:22. Показов 4413. Ответов 3
Метки 20 (Все метки)

Author24 — интернет-сервис помощи студентам
Объясните как решить такую задачу. Сказали можно в два цикла обойтись. Я не понимаю как.
Массив двумерный
Выглядеть в итоге должно так, ползал на форумах читал но не понимаю кааак. Написать нужно на языке си
1 2 3 4 5
16 17 18 19 6
15 24 25 20 7
14 23 22 21 8
13 12 11 10 9
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
21.03.2019, 20:22
Ответы с готовыми решениями:

Заполнение матрицы от центра по спирали (по часовой стрелке)
написать программу, которая заполняет массив от цента по спирали(по часовой стрелке). пример: ...

Обход матрицы по спирали по часовой стрелке, начиная с левого верхнего угла
Выполнить обход матрицы по спирали по часовой стрелке, начиная с левого верхнего угла. Вывести...

Отсортировать матрицу по убыванию и вывести по часовой стрелке по спирали
В квадратный числовой массив записаны целые числа в диапазоне от A до B (где A и B задаются в...

Заполнение матрицы по спирали (из центра по часовой стрелке)
Пользователь должен ввести размерность матрици!Матрица квадратная!А программа должна заполнить её...

3
Диссидент
Эксперт C
27707 / 17325 / 3810
Регистрация: 24.12.2010
Сообщений: 38,979
22.03.2019, 11:42 2
Цитата Сообщение от Dizak Посмотреть сообщение
Сказали можно в два цикла обойтись
Можно и в один. Просто надо завести одну переменную, отвечающую за направление движения (принимающую 4 значения) и 4, отвечающих за границы перемещений (левая, правая, верхняя, нижняя)
Это один из путей. Возможно, есть и другие.
0
2496 / 1097 / 489
Регистрация: 17.11.2018
Сообщений: 2,792
22.03.2019, 18:19 3
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
#define ROWS 5
#define COLS 5
#define SIZE ( ROWS * COLS )
 
int main()
{
    int matr[ROWS][COLS], rowBeg =  0, rowEnd = ROWS - 1,
        value =  0, i, j, colBeg = -1, colEnd = COLS - 1;
 
    while( value < SIZE )
    {
        for( i = ++colBeg; i <= colEnd && value < SIZE; i++ )
            matr[rowBeg][i] = ++value;
        for( i = ++rowBeg; i <= rowEnd && value < SIZE; i++ )
            matr[i][colEnd] = ++value;
        for( i = --colEnd; i >= colBeg && value < SIZE; i-- )
            matr[rowEnd][i] = ++value;
        for( i = --rowEnd; i >= rowBeg && value < SIZE; i-- )
            matr[i][colBeg] = ++value;
    }
 
    for( i = 0; i < ROWS; i++ )
    {
        for( j = 0; j < COLS; j++ )
            printf("%3d", matr[i][j]);
        puts( "" );
    }
 
    return 0;
}
0
Параллельный Кот
1905 / 827 / 350
Регистрация: 25.03.2016
Сообщений: 2,045
22.03.2019, 18:28 4
Цитата Сообщение от Байт Посмотреть сообщение
Можно и в один
Предлагаю вариант вообще без циклов

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
#include <stdio.h>
#include <string.h>
#include <malloc.h>
 
void show(int *a, int n) {
    for (int i = 0; i < n; ++i) {
        for (int j = 0; j < n; ++j)
            printf("%3d", a[i * n + j]);
        printf("\n");
    }
 
    printf("\n");
}
 
const int di[] = {0, 1, 0, -1};
const int dj[] = {1, 0, -1, 0};
 
int spiral(int *a, int n, int i, int j, int d, int c) {
    if ((i < 0) || (j < 0) || (i == n) || (j == n) || (a[i * n + j])) {
        return 0;
    }
 
    a[i * n + j] = c;
//    show(a, n);
 
    if (spiral(a, n, i + di[d], j + dj[d], d, c + 1)) {
        return 1;
    }
 
    d = (d + 1) % 4;
    return spiral(a, n, i + di[d], j + dj[d], d, c + 1);
}
 
int main() {
    int n = 5;
    int *a = (int*)malloc(n * n * sizeof(int));
    memset(a, 0, n * n * sizeof(int));
 
    spiral(a, n, 0, 0, 0, 1);
    show(a, n);
 
    free(a);
    return 0;
}
1
22.03.2019, 18:28
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
22.03.2019, 18:28
Помогаю со студенческими работами здесь

Заполнение матрицы по спирали (с верхнего левого элемента по часовой стрелке)
нужно расставить элементы матрицы А таким образом: 1 2 3 4 5 16 17 18 19 6 15 24 25 20 7...

Заполнение матрицы по спирали (от левого верхнего элемента по часовой стрелке)
Надо заполнить числа спиралью, помогите (чем проще, тем лучше). ПРИМЕР : 1 2 ...

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

Заполнение матрицы по спирали, начинающейся в нижнем левом углу, по часовой стрелке
Матрицу N*N заполнить по часовой стрелке натуральными числами от 1 до N*N по спирали, начинающейся...


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

Или воспользуйтесь поиском по форуму:
4
Ответ Создать тему
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2024, CyberForum.ru