Форум программистов, компьютерный форум, киберфорум
С++ для начинающих
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.55/47: Рейтинг темы: голосов - 47, средняя оценка - 4.55
4 / 4 / 6
Регистрация: 17.09.2012
Сообщений: 325

Заполнение массива змейкой по диагонали

28.08.2014, 22:57. Показов 9540. Ответов 10
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
народ можете немного помочь) надо заполнить массив таким способом
Название: массив.png
Просмотров: 297

Размер: 4.7 Кб
мне как бы не нужна прям целая программа мне хватит только одного условия) дальше я то уже справлюсь, мне просто не очень понятно как в цикле снова идет увелечение значений, ну к примеру если делать цикл из конца к началу, как например сначало заполнить к примеру (5,5) потом (4,5) и потом снова увеличить I и зделать (5,4) ну и тд, ну или же от начала к концу, но заполнять значениями на убывания, но всеравно что-то немогу придумать как бы оно так поворачивалось, подскажите пожалуйста
0
Programming
Эксперт
39485 / 9562 / 3019
Регистрация: 12.04.2006
Сообщений: 41,671
Блог
28.08.2014, 22:57
Ответы с готовыми решениями:

Заполнение матрицы змейкой по диагонали
Дано натуральное N (1<=N<=10). Заполнить матрицу порядка NxN целыми числами 0, 1, 2, 3, …, NxN – 1 по диагонали(из правого верхнего угла...

Заполнение матрицы по диагонали змейкой
будьте добры ,помогите написать програму: заполнение матрицы введенными с клавиатуры числами по диагонали змейкой по принципу 1 3 4 ...

Заполнение массива змейкой
Заполнить массив змейкой; 1 3 4 10 11 21 2 5 9 12 20 22 6 8 13 19 23 30 7 14 18 24 29 31 15 17 25 28 32 35 16 26 27 33 34 36 ...

10
2444 / 1842 / 406
Регистрация: 15.12.2013
Сообщений: 8,243
28.08.2014, 23:34
итернал, подсказываю закономерность: влево,вверх-по-диагонали,вверх,вниз-по-диагонали.
0
1123 / 794 / 219
Регистрация: 15.08.2010
Сообщений: 2,185
28.08.2014, 23:42
S_el, только в верхней левой половине матрицы не прокатит
1
2444 / 1842 / 406
Регистрация: 15.12.2013
Сообщений: 8,243
28.08.2014, 23:48
КОП, доходим до границы и движение не отрабатываем.
0
4 / 4 / 6
Регистрация: 17.09.2012
Сообщений: 325
29.08.2014, 00:06  [ТС]
Цитата Сообщение от S_el Посмотреть сообщение
итернал, подсказываю закономерность: влево,вверх-по-диагонали,вверх,вниз-по-диагонали.
ну что такая закономерность я вижу, я говорю что не совсем могу понять как это будет в цикле, оноже идет подрят, как вот зделать имено это вверх например после ячейки (4,5) заполнить вверх по диагонали (5,4) и что бы еще потом неполнило больше чем нужно
0
2444 / 1842 / 406
Регистрация: 15.12.2013
Сообщений: 8,243
29.08.2014, 00:08
итернал, показывайте наработки,вместе исправим.
0
4 / 4 / 6
Регистрация: 17.09.2012
Сообщений: 325
29.08.2014, 00:19  [ТС]
ладно попытаюсь сам что нибуть придумать) спасибо за советы
0
1123 / 794 / 219
Регистрация: 15.08.2010
Сообщений: 2,185
29.08.2014, 00:36
итернал, универсальную версию будет сложнее реализовать, но если нужно именно 5х5 и только в указанном направлении, то можно в лоб:
задаем начальные координаты на посл элемент.
Делаем цикл, в котором двигаемся по диагонали в каком либо направлении.
Перед движением проверяем выход за пределы массива(и за какую границу), если да, то вместо движения обрабатываем сдвиг в нужном направлении.
Отдельно видимо придется обработать выход за нижний левый угол.

Попробуйте сами, выложите код, разберем.

PS: никогда не заполнял массивы, написал свою версию по указанному выше алгоритму, работает. спагетти те еще... Может гуру подскажут алгоритм попроще.

Добавлено через 1 минуту
и да, выход при достижении нулевых координат либо ограничить количество циклов до 25.

Добавлено через 3 минуты
Кстати, если нужен универсальный, можно заполнить массив в нормальном положении, а потом просто крутить и отражать.

Добавлено через 7 минут
Кстати, сначала пытался колдовать над универсальной формулой, выдающей значение исходя из координат и размера массива. Но понял, что дело долгое. Беглый поиск сразу выдал эту формулу. Но чисто для тренировки можно и поблудить по массиву, ибо формула только для такой змейки.
0
Мой лучший друг-отладчик!
 Аватар для ZaMaZaN4iK
167 / 167 / 30
Регистрация: 24.06.2012
Сообщений: 662
Записей в блоге: 5
29.08.2014, 00:43
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
#include <iostream>
#include <cstdio>
#include <cstdlib>
#include <string>
#include <iomanip>
#include <vector>
#include <algorithm>
#include <utility>
#include <queue>
#include <cmath>
 
using namespace std;
typedef long long ll;
 
 
ll n,m,i,j,k;
ll p[140][150];
 
void test()
{
    cin>>n;
    i=1;j=2;
    p[1][1]=1;
    for(ll q=2;q<n*n;)
    {
        for(;i<=n && j>=1;++i,--j,++q)  p[i][j]=q;
        if(i<=n && j<1) ++j;
        else    {--i;j+=2;}
        for(;i>=1 && j<=n;++j,--i,++q)  p[i][j]=q;
        if(j<=n)++i;
        else    {i+=2;--j;}
    }
    for(ll i=1;i<=n;++i)
    {
        for(ll j=1;j<=n;++j)
            cout<<p[i][j]<<' ';
        cout<<endl;
    }
}
 
 
int main()
{
    ios_base::sync_with_stdio(0);
    test();
    return 0;
}
0
4 / 4 / 6
Регистрация: 17.09.2012
Сообщений: 325
29.08.2014, 02:22  [ТС]
ZaMaZaN4iK, спасибо за код, на ночь уже не хочется розбератся уже утром посмотрю что да как, и у меня уже есть свои наработки, спасибо большое
КОП, спасибо за мысли, я тоже поискал в интернете на сколько я понял там получается нужно несколько циклов для заполнения двух половинок масива как бы, если что утром посмотрю код ЗамаЗанчика и если у меня будет какой-то другой ход решения тоже выложу, мало ли кому пригодится, я просто не разберал как у него
0
1123 / 794 / 219
Регистрация: 15.08.2010
Сообщений: 2,185
29.08.2014, 02:35
Цитата Сообщение от итернал Посмотреть сообщение
несколько циклов
вполне можно уложиться в один, надо лишь рулить координатами правильно, но главное - чтобы код был понятен. Лучше уж алгоритм похуже, но зато его можно быстро понять.

На всякий случай скину немного извращенный вариант, упомянутый выше.
C++
1
2
3
4
5
6
7
8
for (i = 0; i < m; ++i)
    {
        for (j = 0; j < m - i; ++j)
        {
            arr[i][j] = m*m + 1 - ((i + j + 1)*(i + j) / 2 + (i + j + 1) % 2 * (j + 1) + (i + j) % 2 * (i + 1));
            arr[m - i - 1][m - j - 1] = m*m + 1 - arr[i][j];
        }
    }
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
inter-admin
Эксперт
29715 / 6470 / 2152
Регистрация: 06.03.2009
Сообщений: 28,500
Блог
29.08.2014, 02:35
Помогаю со студенческими работами здесь

Заполнение массива змейкой
Нужно найти ошибку в коде Задача:вводится число N, нужно сформировать двумерный массив из n*n элементов в порядке возрастания согласно...

Заполнение массива змейкой
Пожалуйста, отредактируйте код, чтобы вывело так же (см. вложение): void print_array2(int** Arr, int n, int m) { int k = 0; ...

Заполнение двумерного массива змейкой
Добрый вечер, помогите пожалуйста, я написал код заполнения матрицы змейкой начиная от левого верхнего угла, но выдает ошибку Stack...

Заполнение двумерного массива диагоналями (не змейкой!)
Здравствуйте, помогите с задачей, пожалуйста Даны числа n и m. Создайте массив A и заполните его, как показано на примере. Входные...

Заполнение массива "Змейкой"
Спасайте! нужно заполнить массив цифрами 49 48 44 43 35 34 22 47 45 42 36 33 23 21 46 41 37 32 24 20 11 40 38 31 25 19 12 10 39...


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

Или воспользуйтесь поиском по форуму:
11
Ответ Создать тему
Новые блоги и статьи
SDL3 для Web (WebAssembly): Реализация движения на Box2D v3 - трение и коллизии с повёрнутыми стенами
8Observer8 20.02.2026
Содержание блога Box2D позволяет легко создать главного героя, который не проходит сквозь стены и перемещается с заданным трением о препятствия, которые можно располагать под углом, как верхнее. . .
Конвертировать закладки radiotray-ng в m3u-плейлист
damix 19.02.2026
Это можно сделать скриптом для PowerShell. Использование . \СonvertRadiotrayToM3U. ps1 <path_to_bookmarks. json> Рядом с файлом bookmarks. json появится файл bookmarks. m3u с результатом. # Check if. . .
Семь CDC на одном интерфейсе: 5 U[S]ARTов, 1 CAN и 1 SSI
Eddy_Em 18.02.2026
Постепенно допиливаю свою "многоинтерфейсную плату". Выглядит вот так: https:/ / www. cyberforum. ru/ blog_attachment. php?attachmentid=11617&stc=1&d=1771445347 Основана на STM32F303RBT6. На борту пять. . .
Камера Toupcam IUA500KMA
Eddy_Em 12.02.2026
Т. к. у всяких "хикроботов" слишком уж мелкий пиксель, для подсмотра в ESPriF они вообще плохо годятся: уже 14 величину можно рассмотреть еле-еле лишь на экспозициях под 3 секунды (а то и больше),. . .
И ясному Солнцу
zbw 12.02.2026
И ясному Солнцу, и светлой Луне. В мире покоя нет и люди не могут жить в тишине. А жить им немного лет.
«Знание-Сила»
zbw 12.02.2026
«Знание-Сила» «Время-Деньги» «Деньги -Пуля»
SDL3 для Web (WebAssembly): Подключение Box2D v3, физика и отрисовка коллайдеров
8Observer8 12.02.2026
Содержание блога Box2D - это библиотека для 2D физики для анимаций и игр. С её помощью можно определять были ли коллизии между конкретными объектами и вызывать обработчики событий столкновения. . . .
SDL3 для Web (WebAssembly): Загрузка PNG с прозрачным фоном с помощью SDL_LoadPNG (без SDL3_image)
8Observer8 11.02.2026
Содержание блога Библиотека SDL3 содержит встроенные инструменты для базовой работы с изображениями - без использования библиотеки SDL3_image. Пошагово создадим проект для загрузки изображения. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru