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

Числа в массиве "змейкой"

17.11.2017, 00:04. Показов 1178. Ответов 5
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Собственно задание:

Код, который написан мной:
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
int main(){ 
int n; 
cin >> n; 
int **a = new int*[n]; 
for(int i = 0; i < n; ++i) 
a[i] = new int[n]; 
for (int j = 0; j<n; j += 2) { 
for (int i = 0; i<n; i++) {
a[j][i] = i + j*n;
} 
} 
for (int j= 1; j<n; j += 2) { 
for (int i = n - 1; i >= 0; i--) {
a[j][i] = (n - i - 1) + j*n; 
}} 
 
 
for (int j = 0; j<n; j++) { 
for (int i = 0; i<n; i++){
cout << a[i][j] << " "; 
} 
cout <<endl; 
} 
 
for(int i = 0; i < n; ++i) 
delete[] a[i]; 
delete[] a; 
 
return 0; 
}
"Змейка", как вы понимаете, выводится не по требуемой схеме. Прекрасно осознаю, что дело за малым - только парочку условий изменить, но прийти к мысли, что именно нужно откорректировать, не получается. Может что-то где-то перепутал случайно - думать уже нет сил.
Тыкните, пожалуйста, носом в ошибку.
Заранее спасибо.
0
Лучшие ответы (1)
IT_Exp
Эксперт
34794 / 4073 / 2104
Регистрация: 17.06.2006
Сообщений: 32,602
Блог
17.11.2017, 00:04
Ответы с готовыми решениями:

Расположить числа в квадрате змейкой
Кто сможет, помогите пожалуйста Змей Горыныч убедительно просит расположить N2 чисел от 1 до N2 в квадрате змейкой. Ввод. В...

Увеличить в массиве все четные числа, содержащиеся в массиве, на исходное значение первого четного числа
2. Дан массив, состоящий из N элементов (количество элементов массива и элементы массива вводятся с клавиатуры). Увеличить все четные...

Даны числа n и m. Создайте массив A[n][m] и заполните его змейкой
Здравствуйте. Помогите пожалуйста неумехе. Плохо понимаю Pascal :( Задания: 5) Даны числа n и m. Создайте массив A и заполните...

5
 Аватар для Kuzia domovenok
4268 / 3327 / 926
Регистрация: 25.03.2012
Сообщений: 12,531
Записей в блоге: 1
17.11.2017, 00:26
C++
1
2
3
4
5
6
7
8
int j=0, cnt =0, step=-1;
for(int i =0;i<n;++i){
  step=-step;
  do {
     j+=step;
     a[i][j]=cnt ++;
  }while (j>0 && j <n-1);
}
Добавлено через 1 минуту
Это всё заполнение змейкой. Никаких десятков for.
1
 Аватар для Fixer_84
1505 / 969 / 812
Регистрация: 30.04.2016
Сообщений: 3,337
17.11.2017, 19:00
sealpup, здравствуйте! Вот мой старый вариант алгоритма. Если получится, попробую переделать.

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 <bits/stdc++.h>
 
using namespace std;
 
int main()
{
    int N, snake;
    cout << "Enter a matrix size:" << "\n";
    cout << "N = ";
    cin >> N;
    int** arr = new int*[N];
    for (int i = 0; i < N; i++)
    {#
        arr[i] = new int[N];
    }
    snake = N * N - 1;
    for (int i = 0; i < N; i++)
    {
        for (int j = 0; j < N; j++)
        {
            arr[i][j] = snake;
            snake--;
        }
    }
    for (int i = 0; i < N; i++)
    {
        if (N % 2 != 0 && i % 2 != 0) reverse(arr[i], arr[i] + N);
        if (N % 2 == 0 && i % 2 == 0) reverse(arr[i], arr[i] + N);
    }
    cout << "Target matrix:" << "\n";
    for (int i = 0; i < N; i++)
    {
        for (int j = 0; j < N; j++)
        {
            cout.width(3);
            cout << arr[i][j] << " ";
        }
        cout << "\n";
    }
    for (int i = 0; i < N; i++)
    {
        delete[] arr[i];
    }
    delete [] arr;
    cin.get();
    return 0;
}
Добавлено через 29 минут
sealpup, P.S. в 13 строчке символ "#" нужно убрать.

Добавлено через 3 часа 43 минуты
sealpup, мне удалось решить задачу по-другому, но даже не знаю лучше ли это, чем мой код в посте #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
31
32
33
34
35
36
37
38
39
40
41
42
43
44
#include <iostream>
 
using namespace std;
 
int main()
{
    int N, snake, i, j;
    cin >> N;
    int arr[N][N];
    fill(arr[0], arr[0] + N * N, 0);
    i = j = N - 1;
    snake = 0;
    for (int k = 0; k < N / 2 + 1; k++)
    {
        while (j >= 0)
        {
            arr[i][j] = snake;
            j--;
            snake++;
        }
        j++;
        i--;
        while (j != N)
        {
            arr[i][j] = snake;
            j++;
            snake++;
        }
        j--;
        i--;
    }
    cout << "Target matrix:" << "\n";
    for (int i = 0; i < N; i++)
    {
        for (int j = 0; j < N; j++)
        {
            cout.width(3);
            cout << arr[i][j] << " ";
        }
        cout << "\n";
    }
    system("pause");
    return 0;
}
0
 Аватар для Kuzia domovenok
4268 / 3327 / 926
Регистрация: 25.03.2012
Сообщений: 12,531
Записей в блоге: 1
17.11.2017, 19:02
Fixer_84, первое что прихоит в голову - проверить на нечётных N и увидеть как второй цикл увайл выйдет за пределы массива после i--
0
 Аватар для Fixer_84
1505 / 969 / 812
Регистрация: 30.04.2016
Сообщений: 3,337
17.11.2017, 20:41
Лучший ответ Сообщение было отмечено sealpup как решение

Решение

Kuzia domovenok, переписал программу для подобной задачи (для матрицы N x M, двигаясь с левого верхнего угла) и отправил на сдачу. Только 9 из 12 тестов пройдены, хотя программа работает корректно. Может быть, кто-то знает что я делаю не так:

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
#include <bits/stdc++.h>
 
using namespace std;
 
int main()
{
    int N, M, snake, i, j;
    cin >> N >> M;
    int arr[N][M];
    fill(arr[0], arr[0] + N * M, 0);
    i = snake = 0;
    j = -1;
    do
    {
        while (j < M - 1)
        {
            arr[i][j+1] = snake;
            j++;
            snake++;
        }
        i++;
        while (j >= 0)
        {
            arr[i][j] = snake;
            j--;
            snake++;
        }
        i++;
    } while (snake < N * M - 1);
    for (int i = 0; i < N; i++)
    {
        for (int j = 0; j < M; j++)
        {
            cout.width(3);
            cout << arr[i][j] << " ";
        }
        cout << "\n";
    }
    system("pause");
    return 0;
}
Добавлено через 32 минуты
sealpup, переписал код так (с учетом для нечетных N). Вот решение:

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
#include <iostream>
 
using namespace std;
 
int main()
{
    int N, snake, i, j;
    cin >> N;
    int arr[N][N];
    i = j = N - 1;
    snake = 0;
    do
    {
        while (j >= 0)
        {
            arr[i][j] = snake;
            j--;
            snake++;
        }
        if (snake == N * N - 1)
            break;
        i--;
        while (j < N - 1)
        {
            arr[i][j + 1] = snake;
            j++;
            snake++;
        }
        i--;
    } while (snake < N * N - 1);
    cout << "Target matrix:" << "\n";
    for (int i = 0; i < N; i++)
    {
        for (int j = 0; j < N; j++)
        {
            cout.width(3);
            cout << arr[i][j] << " ";
        }
        cout << "\n";
    }
    system("pause");
    return 0;
}
1
0 / 0 / 0
Регистрация: 19.10.2017
Сообщений: 59
18.11.2017, 10:36  [ТС]
Большое спасибо за предоставление таких подробных ответов! Богатства всего русского языка не хватит, чтобы выразить мою благодарность!
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
BasicMan
Эксперт
29316 / 5623 / 2384
Регистрация: 17.02.2009
Сообщений: 30,364
Блог
18.11.2017, 10:36
Помогаю со студенческими работами здесь

Даны числа n и m. Создайте массив A[n][m] и заполните его змейкой
Даны числа n и m. Создайте массив A и заполните его змейкой (см. пример). Входные данные Программа получает на вход два числа n и m....

Соединить числа в квадрате "змейкой"
На конверт нужно клеить марку. Место приклеивание нужно заштриховать &quot;змейкой&quot;, как показано в примере. Требуется вывести квадрат...

Опрделить в массиве и вывести на экран простые числа во введёном массиве
Занести в одномерный массив целые числа с клавиатуры. Опрделить в массиве и вывести на экран простые числа во введёном массиве. Вот моя...

В массиве поменять местами числа 5 и 15; найти сумму диагональных элементов в 2-мерном массиве.
Тема: Использование вложенных циклов и ветвлений при обработке массивов, обработка матриц....

Проверить, есть ли в массиве А [n] числа В и С и определить, какое из чисел встречается в массиве чаще
1. Проверить, есть ли в массиве А числа В и С и определить, какое из чисел встречается в массиве чаще.


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

Или воспользуйтесь поиском по форуму:
6
Ответ Создать тему
Новые блоги и статьи
Thinkpad X220 Tablet — это лучший бюджетный ноутбук для учёбы, точка.
Programma_Boinc 23.12.2025
Thinkpad X220 Tablet — это лучший бюджетный ноутбук для учёбы, точка. Рецензия / Мнение Это мой обзор планшета X220 с точки зрения школьника. Недавно я решила попытаться уменьшить свой. . .
PhpStorm 2025.3: WSL Terminal всегда стартует в ~
and_y87 14.12.2025
PhpStorm 2025. 3: WSL Terminal всегда стартует в ~ (home), игнорируя директорию проекта Симптом: После обновления до PhpStorm 2025. 3 встроенный терминал WSL открывается в домашней директории. . .
Как объединить две одинаковые БД Access с разными данными
VikBal 11.12.2025
Помогите пожалуйста !! Как объединить 2 одинаковые БД Access с разными данными.
Новый ноутбук
volvo 07.12.2025
Всем привет. По скидке в "черную пятницу" взял себе новый ноутбук Lenovo ThinkBook 16 G7 на Амазоне: Ryzen 5 7533HS 64 Gb DDR5 1Tb NVMe 16" Full HD Display Win11 Pro
Музыка, написанная Искусственным Интеллектом
volvo 04.12.2025
Всем привет. Некоторое время назад меня заинтересовало, что уже умеет ИИ в плане написания музыки для песен, и, собственно, исполнения этих самых песен. Стихов у нас много, уже вышли 4 книги, еще 3. . .
От async/await к виртуальным потокам в Python
IndentationError 23.11.2025
Армин Ронахер поставил под сомнение async/ await. Создатель Flask заявляет: цветные функции - провал, виртуальные потоки - решение. Не threading-динозавры, а новое поколение лёгких потоков. Откат?. . .
Поиск "дружественных имён" СОМ портов
Argus19 22.11.2025
Поиск "дружественных имён" СОМ портов На странице: https:/ / norseev. ru/ 2018/ 01/ 04/ comportlist_windows/ нашёл схожую тему. Там приведён код на С++, который показывает только имена СОМ портов, типа,. . .
Сколько Государство потратило денег на меня, обеспечивая инсулином.
Programma_Boinc 20.11.2025
Сколько Государство потратило денег на меня, обеспечивая инсулином. Вот решила сделать интересный приблизительный подсчет, сколько государство потратило на меня денег на покупку инсулинов. . . .
Ломающие изменения в C#.NStar Alpha
Etyuhibosecyu 20.11.2025
Уже можно не только тестировать, но и пользоваться C#. NStar - писать оконные приложения, содержащие надписи, кнопки, текстовые поля и даже изображения, например, моя игра "Три в ряд" написана на этом. . .
Мысли в слух
kumehtar 18.11.2025
Кстати, совсем недавно имел разговор на тему медитаций с людьми. И обнаружил, что они вообще не понимают что такое медитация и зачем она нужна. Самые базовые вещи. Для них это - когда просто люди. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2025, CyberForum.ru