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

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

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

народ можете немного помочь) надо заполнить массив таким способом
Название: массив.png
Просмотров: 175

Размер: 4.7 Кб
мне как бы не нужна прям целая программа мне хватит только одного условия) дальше я то уже справлюсь, мне просто не очень понятно как в цикле снова идет увелечение значений, ну к примеру если делать цикл из конца к началу, как например сначало заполнить к примеру (5,5) потом (4,5) и потом снова увеличить I и зделать (5,4) ну и тд, ну или же от начала к концу, но заполнять значениями на убывания, но всеравно что-то немогу придумать как бы оно так поворачивалось, подскажите пожалуйста
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
28.08.2014, 22:57
Ответы с готовыми решениями:

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

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

Заполнение массива змейкой
Заполнить массив змейкой; 1 3 4 10 11 21 2 5 9 12 20 22 6 8 13 19 23 30 7...

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

Заполнение массива "Змейкой"
Спасайте! нужно заполнить массив цифрами 49 48 44 43 35 34 22 47 45 42 36 33...

10
S_el
2151 / 1679 / 353
Регистрация: 15.12.2013
Сообщений: 6,644
28.08.2014, 23:34 2
итернал, подсказываю закономерность: влево,вверх-по-диагонали,вверх,вниз-по-диагонали.
0
КОП
523 / 380 / 120
Регистрация: 15.08.2010
Сообщений: 1,064
Завершенные тесты: 1
28.08.2014, 23:42 3
S_el, только в верхней левой половине матрицы не прокатит
1
S_el
2151 / 1679 / 353
Регистрация: 15.12.2013
Сообщений: 6,644
28.08.2014, 23:48 4
КОП, доходим до границы и движение не отрабатываем.
0
итернал
4 / 4 / 6
Регистрация: 17.09.2012
Сообщений: 325
Завершенные тесты: 1
29.08.2014, 00:06  [ТС] 5
Цитата Сообщение от S_el Посмотреть сообщение
итернал, подсказываю закономерность: влево,вверх-по-диагонали,вверх,вниз-по-диагонали.
ну что такая закономерность я вижу, я говорю что не совсем могу понять как это будет в цикле, оноже идет подрят, как вот зделать имено это вверх например после ячейки (4,5) заполнить вверх по диагонали (5,4) и что бы еще потом неполнило больше чем нужно
0
S_el
2151 / 1679 / 353
Регистрация: 15.12.2013
Сообщений: 6,644
29.08.2014, 00:08 6
итернал, показывайте наработки,вместе исправим.
0
итернал
4 / 4 / 6
Регистрация: 17.09.2012
Сообщений: 325
Завершенные тесты: 1
29.08.2014, 00:19  [ТС] 7
ладно попытаюсь сам что нибуть придумать) спасибо за советы
0
КОП
523 / 380 / 120
Регистрация: 15.08.2010
Сообщений: 1,064
Завершенные тесты: 1
29.08.2014, 00:36 8
итернал, универсальную версию будет сложнее реализовать, но если нужно именно 5х5 и только в указанном направлении, то можно в лоб:
задаем начальные координаты на посл элемент.
Делаем цикл, в котором двигаемся по диагонали в каком либо направлении.
Перед движением проверяем выход за пределы массива(и за какую границу), если да, то вместо движения обрабатываем сдвиг в нужном направлении.
Отдельно видимо придется обработать выход за нижний левый угол.

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

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

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

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

Добавлено через 7 минут
Кстати, сначала пытался колдовать над универсальной формулой, выдающей значение исходя из координат и размера массива. Но понял, что дело долгое. Беглый поиск сразу выдал эту формулу. Но чисто для тренировки можно и поблудить по массиву, ибо формула только для такой змейки.
0
ZaMaZaN4iK
Мой лучший друг-отладчик!
164 / 164 / 30
Регистрация: 24.06.2012
Сообщений: 662
Записей в блоге: 5
Завершенные тесты: 1
29.08.2014, 00:43 9
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
Завершенные тесты: 1
29.08.2014, 02:22  [ТС] 10
ZaMaZaN4iK, спасибо за код, на ночь уже не хочется розбератся уже утром посмотрю что да как, и у меня уже есть свои наработки, спасибо большое
КОП, спасибо за мысли, я тоже поискал в интернете на сколько я понял там получается нужно несколько циклов для заполнения двух половинок масива как бы, если что утром посмотрю код ЗамаЗанчика и если у меня будет какой-то другой ход решения тоже выложу, мало ли кому пригодится, я просто не разберал как у него
0
КОП
523 / 380 / 120
Регистрация: 15.08.2010
Сообщений: 1,064
Завершенные тесты: 1
29.08.2014, 02:35 11
Цитата Сообщение от итернал Посмотреть сообщение
несколько циклов
вполне можно уложиться в один, надо лишь рулить координатами правильно, но главное - чтобы код был понятен. Лучше уж алгоритм похуже, но зато его можно быстро понять.

На всякий случай скину немного извращенный вариант, упомянутый выше.
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
29.08.2014, 02:35
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
29.08.2014, 02:35

Заполнение массива по диагонали!
всем привет!помогите пожалуйста!не получается выстроить порядок! задача такая!...

Заполнение массива 6х6 по диагонали
Заполнить массив 6х6 по диагонали (вложение) И вывести на экран. Я записал...

Заполнение двумерного массива (зануление диагонали)
Всем добрый вечер, прошу вашей помощи... дан массив 6х6, заполненный числами...


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

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

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2018, vBulletin Solutions, Inc.
Рейтинг@Mail.ru