Форум программистов, компьютерный форум, киберфорум
Наши страницы

С++ для начинающих

Войти
Регистрация
Восстановить пароль
 
Рейтинг: Рейтинг темы: голосов - 10, средняя оценка - 4.60
итернал
4 / 4 / 0
Регистрация: 17.09.2012
Сообщений: 324
Завершенные тесты: 1
#1

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

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

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

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

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

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

Заполнение массива змейкой - C++
Заполнить массив змейкой; 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 ...

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

Заполнение массива "Змейкой" - C++
Спасайте! нужно заполнить массив цифрами 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...

Заполнение массива по диагонали! - C++
всем привет!помогите пожалуйста!не получается выстроить порядок! задача такая! заполнить массив 6*6 цыфрами от 1 до 21 по следущей схеме: ...

10
S_el
2124 / 1651 / 311
Регистрация: 15.12.2013
Сообщений: 6,480
28.08.2014, 23:34 #2
итернал, подсказываю закономерность: влево,вверх-по-диагонали,вверх,вниз-по-диагонали.
0
КОП
395 / 314 / 99
Регистрация: 15.08.2010
Сообщений: 862
28.08.2014, 23:42 #3
S_el, только в верхней левой половине матрицы не прокатит
1
S_el
2124 / 1651 / 311
Регистрация: 15.12.2013
Сообщений: 6,480
28.08.2014, 23:48 #4
КОП, доходим до границы и движение не отрабатываем.
0
итернал
4 / 4 / 0
Регистрация: 17.09.2012
Сообщений: 324
Завершенные тесты: 1
29.08.2014, 00:06  [ТС] #5
Цитата Сообщение от S_el Посмотреть сообщение
итернал, подсказываю закономерность: влево,вверх-по-диагонали,вверх,вниз-по-диагонали.
ну что такая закономерность я вижу, я говорю что не совсем могу понять как это будет в цикле, оноже идет подрят, как вот зделать имено это вверх например после ячейки (4,5) заполнить вверх по диагонали (5,4) и что бы еще потом неполнило больше чем нужно
0
S_el
2124 / 1651 / 311
Регистрация: 15.12.2013
Сообщений: 6,480
29.08.2014, 00:08 #6
итернал, показывайте наработки,вместе исправим.
0
итернал
4 / 4 / 0
Регистрация: 17.09.2012
Сообщений: 324
Завершенные тесты: 1
29.08.2014, 00:19  [ТС] #7
ладно попытаюсь сам что нибуть придумать) спасибо за советы
0
КОП
395 / 314 / 99
Регистрация: 15.08.2010
Сообщений: 862
29.08.2014, 00:36 #8
итернал, универсальную версию будет сложнее реализовать, но если нужно именно 5х5 и только в указанном направлении, то можно в лоб:
задаем начальные координаты на посл элемент.
Делаем цикл, в котором двигаемся по диагонали в каком либо направлении.
Перед движением проверяем выход за пределы массива(и за какую границу), если да, то вместо движения обрабатываем сдвиг в нужном направлении.
Отдельно видимо придется обработать выход за нижний левый угол.

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

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

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

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

Добавлено через 7 минут
Кстати, сначала пытался колдовать над универсальной формулой, выдающей значение исходя из координат и размера массива. Но понял, что дело долгое. Беглый поиск сразу выдал эту формулу. Но чисто для тренировки можно и поблудить по массиву, ибо формула только для такой змейки.
0
ZaMaZaN4iK
Мой лучший друг-отладчик!
164 / 164 / 9
Регистрация: 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 / 0
Регистрация: 17.09.2012
Сообщений: 324
Завершенные тесты: 1
29.08.2014, 02:22  [ТС] #10
ZaMaZaN4iK, спасибо за код, на ночь уже не хочется розбератся уже утром посмотрю что да как, и у меня уже есть свои наработки, спасибо большое
КОП, спасибо за мысли, я тоже поискал в интернете на сколько я понял там получается нужно несколько циклов для заполнения двух половинок масива как бы, если что утром посмотрю код ЗамаЗанчика и если у меня будет какой-то другой ход решения тоже выложу, мало ли кому пригодится, я просто не разберал как у него
0
КОП
395 / 314 / 99
Регистрация: 15.08.2010
Сообщений: 862
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 по диагонали - C++
Заполнить массив 6х6 по диагонали (вложение) И вывести на экран. Я записал изменение адресации по порядку, получилось 11 этапов: ...

Заполнение змейкой - C++
заполнение матрицы по диагонали змейкой по принципу 1 3 4 10 2 5 9 11 6 8 12 15 7 13 14 16. Программа работает при вводе данных с...

Заполнение двумерного массива (зануление диагонали) - C++
Всем добрый вечер, прошу вашей помощи... дан массив 6х6, заполненный числами по порядку. Нужно занулить все числа ниже побочной...

Заполнение матрицы змейкой - C++
Подскажите как мне изменить код #include &lt;iostream&gt; #include &lt;iomanip&gt; using namespace std; int main() { int n; ...


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

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

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