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

Вывод элементов двумерного массива змейкой без использования if

07.04.2022, 16:31. Показов 1126. Ответов 3
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Помогите пожалуйста с решением задачи.

У нас есть двумерный массив целых чисел размером 5 на 5 элементов. Его надо инициализировать и отобразить на экране. Элементы должны быть инициализированы не последовательно, а змейкой.

Нужно решить эту задачу, используя минимальное количество временных переменных и без условных переходов if.

Итоговый результат:

0 1 2 3 4
9 8 7 6 5
10 11 12 13 14
19 18 17 16 15
20 21 22 23 24

И вот проблема в том что всё к чему я прихожу это использование либо напрямую if либо тернарного оператора ,который по сути тоже самое и делает(
0
Лучшие ответы (1)
IT_Exp
Эксперт
34794 / 4073 / 2104
Регистрация: 17.06.2006
Сообщений: 32,602
Блог
07.04.2022, 16:31
Ответы с готовыми решениями:

Вывод двумерного массива змейкой
Здраствуйте,я новичок в Python, уже долго не получается задача: Вернуть матрицу заполненную значениями змейкой по диагонали в зависимости...

Вывод элементов из массива змейкой
Пожалуйста, помогите! горит экзамен! необходимо составить программу, в которой нужно вывести элементы из массива змейкой. Буду вам очень...

Вывод массива без использования цикла на C(pure))
Какие есть мысли и/или готовые решения по сабжу ?

3
Злостный нарушитель
 Аватар для Verevkin
10358 / 5773 / 1274
Регистрация: 12.03.2015
Сообщений: 26,685
07.04.2022, 18:09
Лучший ответ Сообщение было отмечено al-Azif как решение

Решение

Обожаю задачки для спинного мозга.
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
/* Заполнение матрицы x размером rows x cols змейкой:  
    0    1    2    3    4
    9    8    7    6    5
   10   11   12   13   14
   19   18   17   16   15
   20   21   22   23   24
   29   28   27   26   25 */
void foo(int** x, unsigned rows, unsigned cols)
{
  for (unsigned row = 0, value = 0; row != rows; row++)
    for (unsigned idx = 0; idx != cols; idx++)
    {
      unsigned col = (~row & 1) * idx | (row & 1) * (cols - idx - 1);
      x[row][col] = value++; 
    }
}
Работает.
Code
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
 >> matrix:  [20 x 15]
    0    1    2    3    4    5    6    7    8    9   10   11   12   13   14
   29   28   27   26   25   24   23   22   21   20   19   18   17   16   15
   30   31   32   33   34   35   36   37   38   39   40   41   42   43   44
   59   58   57   56   55   54   53   52   51   50   49   48   47   46   45
   60   61   62   63   64   65   66   67   68   69   70   71   72   73   74
   89   88   87   86   85   84   83   82   81   80   79   78   77   76   75
   90   91   92   93   94   95   96   97   98   99  100  101  102  103  104
  119  118  117  116  115  114  113  112  111  110  109  108  107  106  105
  120  121  122  123  124  125  126  127  128  129  130  131  132  133  134
  149  148  147  146  145  144  143  142  141  140  139  138  137  136  135
  150  151  152  153  154  155  156  157  158  159  160  161  162  163  164
  179  178  177  176  175  174  173  172  171  170  169  168  167  166  165
  180  181  182  183  184  185  186  187  188  189  190  191  192  193  194
  209  208  207  206  205  204  203  202  201  200  199  198  197  196  195
  210  211  212  213  214  215  216  217  218  219  220  221  222  223  224
  239  238  237  236  235  234  233  232  231  230  229  228  227  226  225
  240  241  242  243  244  245  246  247  248  249  250  251  252  253  254
  269  268  267  266  265  264  263  262  261  260  259  258  257  256  255
  270  271  272  273  274  275  276  277  278  279  280  281  282  283  284
  299  298  297  296  295  294  293  292  291  290  289  288  287  286  285
1
1 / 1 / 0
Регистрация: 04.03.2022
Сообщений: 8
11.04.2022, 15:46  [ТС]
Большое спасибо, подогнал под свою задачу , всё работает ))

Вы можете пожалуйста подсказать что такое ~i ?
Не нашел никакой информации на этот счет.

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
#include <iostream>
using namespace std;
 
int main() 
{
 
  int numbers [5][5] = {{0, 1, 2, 3, 4},
                        {5, 6, 7, 8, 9},
                        {10, 11, 12, 13, 14},
                        {15, 16, 17, 18, 19},
                        {20, 21, 22, 23, 24}};
 
  
  for (int i = 0, value = 0; i < 5; i++)
    {
    for (int j = 0; j < 5; j++)
      {
        int k = (~i & 1) * j | (i & 1) * (5 - j - 1);
        numbers[i][k] = value++; 
      }
    }
 
  for (int i = 0; i < 5; i++)
    {
    for (int j = 0; j < 5; j++)
      {
        cout << numbers [i][j] << "\t";
      }
      cout << endl;
    }
}
0
Злостный нарушитель
 Аватар для Verevkin
10358 / 5773 / 1274
Регистрация: 12.03.2015
Сообщений: 26,685
11.04.2022, 15:51
Цитата Сообщение от al-Azif Посмотреть сообщение
Вы можете пожалуйста подсказать что такое ~i ?
Конечно могу.
Цитата Сообщение от al-Azif Посмотреть сообщение
Не нашел никакой информации на этот счет.
Значит врёшь, что искал.

Добавлено через 1 минуту
Цитата Сообщение от al-Azif Посмотреть сообщение
подогнал под свою задачу , всё работает ))
Ты взял мою красивую универсальную функцию и превратил её в унылое говно.
ВРЕДИТЕЛЬ.
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
BasicMan
Эксперт
29316 / 5623 / 2384
Регистрация: 17.02.2009
Сообщений: 30,364
Блог
11.04.2022, 15:51
Помогаю со студенческими работами здесь

Вывод двумерного массива без цикла
Мне, короче, надо выводить двумерный массив на экран при каждом нажатии клавиши. С циклом for всё проходит гладко, но сейчас у меня имеется...

Вывод одно- двухмерного массива без использования Console.Write()
Ест основной класс Programm, где мы можем использовать Console.Write() Есть класс MyArray, где использовать Console.Write() запрещено....

Осуществить перестановку элементов одномерного массива без использования дополнительного массива
Написать программу, которая осуществляет перестановку элементов одномерного массива (заполненный случайными числами в диапазоне от -5 до...

Алгоритм произвольной перестановки элементов массива без использования 2-го массива
В некоторых случаях при очень больших массивах важны кроме скорости и требования к памяти Например, сортировка записей (структур) по...

Перестановка элементов массива без использования дополнительного массива
Дан массив целых чисел, содержащий 10 элементов, записать в этот же массив сначала все положительные, затем все отрицательные числа и нули,...


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

Или воспользуйтесь поиском по форуму:
4
Ответ Создать тему
Новые блоги и статьи
SDL3 для Desktop (MinGW): Создаём пустое окно с нуля для 2D-графики на SDL3, Си и C++
8Observer8 10.03.2026
Содержание блога Финальные проекты на Си и на C++: hello-sdl3-c. zip hello-sdl3-cpp. zip Результат:
Установка CMake и MinGW 13.1 для сборки С и C++ приложений из консоли и из Qt Creator в EXE
8Observer8 10.03.2026
Содержание блога MinGW - это коллекция инструментов для сборки приложений в EXE. CMake - это система сборки приложений. Здесь описаны базовые шаги для старта программирования с помощью CMake и. . .
Как дизайн сайта влияет на конверсию: 7 решений, которые реально повышают заявки
Neotwalker 08.03.2026
Многие до сих пор воспринимают дизайн сайта как “красивую оболочку”. На практике всё иначе: дизайн напрямую влияет на то, оставит человек заявку или уйдёт через несколько секунд. Даже если у вас. . .
Модульная разработка через nuget packages
DevAlt 07.03.2026
Сложившийся в . Net-среде способ разработки чаще всего предполагает монорепозиторий в котором находятся все исходники. При создании нового решения, мы просто добавляем нужные проекты и имеем. . .
Модульный подход на примере F#
DevAlt 06.03.2026
В блоге дяди Боба наткнулся на такое определение: В этой книге («Подход, основанный на вариантах использования») Ивар утверждает, что архитектура программного обеспечения — это структуры,. . .
Управление камерой с помощью скрипта OrbitControls.js на Three.js: Вращение, зум и панорамирование
8Observer8 05.03.2026
Содержание блога Финальная демка в браузере работает на Desktop и мобильных браузерах. Итоговый код: orbit-controls-threejs-js. zip. Сканируйте QR-код на мобильном. Вращайте камеру одним пальцем,. . .
SDL3 для Web (WebAssembly): Синхронизация спрайтов SDL3 и тел Box2D
8Observer8 04.03.2026
Содержание блога Финальная демка в браузере. Итоговый код: finish-sync-physics-sprites-sdl3-c. zip На первой гифке отладочные линии отключены, а на второй включены:. . .
SDL3 для Web (WebAssembly): Идентификация объектов на Box2D v3 - использование userData и событий коллизий
8Observer8 02.03.2026
Содержание блога Финальная демка в браузере. Итоговый код: finish-collision-events-sdl3-c. zip Сканируйте QR-код на мобильном и вы увидите, что появится джойстик для управления главным героем. . . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru