-3 / 3 / 0
Регистрация: 10.03.2019
Сообщений: 108

Заполните матрицу размерностью n × m числами от 1 до mn, расположив их по спирали

25.03.2019, 12:17. Показов 14448. Ответов 10

Студворк — интернет-сервис помощи студентам
Добрый день. Пытался сделать программу но не получилось. Можете подсказать что сделать. А то совсем уже голова не работает.
Задачка интересная. Про спираль:
По введенным значениям n, m (1 ≤ n ≤ 20, 1 ≤ m ≤ 20) заполните массив размерностью n × m числами от 1 до mn, расположив их по спирали, закрученной по часовой стрелке, так, как показано в примере.

Примеры
входные данные
4 4
выходные данные
1 2 3 4
12 13 14 5
11 16 15 6
10 9 8 7

Очень интересно!
0
Programming
Эксперт
39485 / 9562 / 3019
Регистрация: 12.04.2006
Сообщений: 41,671
Блог
25.03.2019, 12:17
Ответы с готовыми решениями:

Заполните матрицу натуральными числами по спирали и змейкой
Заполните матрицу, содержащую N строк и M столбцов, натуральными числами по спирали и змейкой, то есть типо этого: 1 2 3 4 5 6...

Заполните матрицу n×n числами от 1 до n2 по спирали из файла
Ребят,помогите пожалуйста. Хотел бы на паскале... 1.Заполните матрицу n×n числами от 1 до n2 по спирали, по часовой стрелке,...

Заполните двумерный массив числами по спирали
7. Дано целое N > 0. Заполните двумерный массив размером N×N числами от 1 до N×N по спирали, как показано в примерах. Выведите полученный...

10
Параллельный Кот
 Аватар для valen10
1905 / 827 / 350
Регистрация: 25.03.2016
Сообщений: 2,045
25.03.2019, 12:49
CyberNinjaProg, поиском пользоваться не пробовали? Тут этих спиралей уже вагон и маленькая тележка.
Напрмер, Заполнение матрицы по спирали по часовой стрелке

Основная идея: ввести 4 границы и выполнить имитацию движения вдоль границ. Когда доходим до границы, меняем направление (поворот по часовой стрелке) и сдвигаем границу, вдоль которой шли, к центру.

Можно не вводить границы, а ориентироваться на текущие значния матрицы. Пока впереди 0, продолжаем движение. Встретив ненулевое значение (или при попытке выйти за границы матрицы) меняем направление. Матрицу предварительно заполнить нулями.
1
-3 / 3 / 0
Регистрация: 10.03.2019
Сообщений: 108
25.03.2019, 12:53  [ТС]
Благодарю. Спасибо за подсказку)))
0
-3 / 3 / 0
Регистрация: 10.03.2019
Сообщений: 108
25.03.2019, 15:20  [ТС]
Можете пожалуйста помочь. В чем проблема. Код же верный
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 <stdio.h>
#include <string.h>
#include <malloc.h>
#include <iostream>
using namespace std;
 
 
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;
 
    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, m;
    cin >> n;
    cin >> m;
 
    int *a = (int*)malloc(n * m * sizeof(int));
    memset(a, 0, n * n * sizeof(int));
 
    spiral(a, n, 0, 0, 0, 1);
    show(a, n);
 
    free(a);
    return 0;
}
Миниатюры
Заполните матрицу размерностью n × m числами от 1 до mn, расположив их по спирали  
0
-3 / 3 / 0
Регистрация: 10.03.2019
Сообщений: 108
25.03.2019, 17:01  [ТС]
Не понимаю как отладить программу по условию. Ничего не получается.
Вот условие
По введенным значениям n, m (1 ≤ n ≤ 20, 1 ≤ m ≤ 20) заполните массив размерностью n × m числами от 1 до mn, расположив их по спирали, закрученной по часовой стрелке, так, как показано в примере.

Примеры
входные данные
4 4
выходные данные
1 2 3 4
12 13 14 5
11 16 15 6
10 9 8 7
Получилось только при n*n а как n*m не понимаю.
Вот код:
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;
}
(Автор кода valen10)
0
Параллельный Кот
 Аватар для valen10
1905 / 827 / 350
Регистрация: 25.03.2016
Сообщений: 2,045
25.03.2019, 17:06
Цитата Сообщение от CyberNinjaProg Посмотреть сообщение
Код же верный
Верный. Для квадратной матрицы. А в задании у вас даётся два значения: ширина и высота, то есть матрица не обязательно квадратная.

Зачем вы пытаетесь сдать чужой код? Думал, вы разобраться хотите и попробовать самостоятельно написать. В очередной раз убеждаете меня в обратном. Что ж, подгоняйте тогда этот код под свою задачу.

C++
42
memset(a, 0, n * n * sizeof(int));
m * n

C++
22
if ((i < 0) || (j < 0) || (i == n) || (j == n) || (a[i * n + j])) {
j == m

Вся адресация меняется с a[i * n + j] на a[i * m + j], т.к. размер строки изменился (а можно было порядок сделать m x n, и менять пришлось бы меньше).

И передайте второй размер в функцию. С выводом матрицы, надеюсь, сами справитесь, там тоже второй размер нужно указать.
0
-3 / 3 / 0
Регистрация: 10.03.2019
Сообщений: 108
25.03.2019, 17:43  [ТС]
Спасибо вам!
Миниатюры
Заполните матрицу размерностью n × m числами от 1 до mn, расположив их по спирали  
0
-4 / 0 / 0
Регистрация: 26.03.2019
Сообщений: 32
26.03.2019, 15:21
Привет, не могли бы Вы мне прислать весь код этой задачи, просто я в С++ не очень. Пожалуйста!
0
29.03.2019, 21:59

Не по теме:

CyberNinjaProg, в Сириус собираешься?

0
-15 / 1 / 0
Регистрация: 26.01.2019
Сообщений: 34
31.03.2019, 09:49
CyberNinjaProg, хватит сириус гуглить
1
0 / 0 / 0
Регистрация: 09.02.2019
Сообщений: 8
31.03.2019, 17:30
Не такие проходили на Сириус. В прошлом годы чел приехал, он не знал что такое матрица. Жалко в Сириус мне уже незя(
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
inter-admin
Эксперт
29715 / 6470 / 2152
Регистрация: 06.03.2009
Сообщений: 28,500
Блог
31.03.2019, 17:30
Помогаю со студенческими работами здесь

Создайте матрицу A[2*n+1][2*n+1] и заполните её по спирали, начиная с числа 0 в центральной клетке A[n][n]
Дано число n. Создайте матрицу int A и заполните её по спирали, начиная с числа 0 в центральной клетке A. Спираль выходит вверх, далее...

Дан двумерный массив размерностью n × m, заполненный случайными числами
Дан двумерный массив размерностью n × m, заполненный случайными числами. Определить, существует ли в этом массиве столбец, в котором...

Создать матрицу, размерностью N*N и заполнить ее по спирали (от a[0][0] в сторону a[0][n-1]) от 1 до N^2
Создать матрицу, размерностью N*N и заполнить ее по спирали (от a в сторону a) от 1 до N^2 ну сам алгоритм то я вообщем-то понял, что...

Заполните квадратную матрицу заданного размера числами из данного файла
Пусть дан файл целых чисел. Заполните квадратную матрицу заданного размера числами из этого файла. Проверьте, есть ли в сформированной...

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


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

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

Новые блоги и статьи
Angular: Вопросы и ответы на собеседовании
Reangularity 15.06.2025
Готовишься к техническому интервью по Angular? Я собрал самые распространенные вопросы, с которыми сталкиваются разработчики на собеседованиях в этом году. От базовых концепций до продвинутых. . .
Архитектура Onion в ASP.NET Core MVC
stackOverflow 15.06.2025
Что такое эта "луковая" архитектура? Термин предложил Джеффри Палермо (Jeffrey Palermo) в 2008 году, и с тех пор подход только набирал обороты. Суть проста - представьте себе лук с его. . .
Unity 4D
GameUnited 13.06.2025
Четырехмерное пространство. . . Звучит как что-то из научной фантастики, правда? Однако для меня, как разработчика со стажем в игровой индустрии, четвертое измерение давно перестало быть абстракцией из. . .
SSE (Server-Sent Events) в ASP.NET Core и .NET 10
UnmanagedCoder 13.06.2025
Кажется, Microsoft снова подкинула нам интересную фичу в новой версии фреймворка. Работая с превью . NET 10, я наткнулся на нативную поддержку Server-Sent Events (SSE) в ASP. NET Core Minimal APIs. Эта. . .
С днём независимости России!
Hrethgir 13.06.2025
Решил побеседовать, с утра праздничного дня, с LM о завоеваниях. То что она написала о народе, представителем которого я являюсь сам сначала возмутило меня, но дальше только смешило. Это чисто. . .
Лето вокруг.
kumehtar 13.06.2025
Лето вокруг. Наполненное бурями и ураганами событий. На фоне магии Жизни, священной и вечной, неумелой рукой человека рисуется панорама душевного непокоя. Странные серые краски проникают и. . .
Популярные LM модели ориентированы на увеличение затрат ресурсов пользователями сгенерированного кода (грязь -заслуги чистоплюев).
Hrethgir 12.06.2025
Вообще обратил внимание, что они генерируют код (впрочем так-же ориентированы разработчики чипов даже), чтобы пользователь их использующий уходил в тот или иной убыток. Это достаточно опытные модели,. . .
Топ10 библиотек C для квантовых вычислений
bytestream 12.06.2025
Квантовые вычисления - это та область, где теория встречается с практикой на границе наших знаний о физике. Пока большая часть шума вокруг квантовых компьютеров крутится вокруг языков высокого уровня. . .
Dispose и Finalize в C#
stackOverflow 12.06.2025
Работая с C# больше десяти лет, я снова и снова наблюдаю одну и ту же историю: разработчики наивно полагаются на сборщик мусора, как на волшебную палочку, которая решит все проблемы с памятью. Да,. . .
Повышаем производительность игры на Unity 6 с GPU Resident Drawer
GameUnited 11.06.2025
Недавно копался в новых фичах Unity 6 и наткнулся на GPU Resident Drawer - штуку, которая заставила меня присвистнуть от удивления. По сути, это внутренний механизм рендеринга, который автоматически. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2025, CyberForum.ru