MLoops 10

Задача MLoops 10

Найдите закономерность и напишите программу, которая выводит аналогичную таблицу для любых чисел [latex]n > 0[/latex] (количество столбцов) и [latex]m > 0[/latex] (количество строк).
Замечание 1. В некоторых задачах появляется дополнительный параметр [latex]k < n[/latex].
Замечание 2. Многоточие означает продолжение последовательности
Совет. Если закономерность разгадать не получается, попробуйте воспользоваться Онлайн-энциклопедией целочисленных последовательностей.

Тесты

Входные данные Выходные данные
3 6 2 121+12
21+121
1+121+
5 5 4 12343
23432
34321
4321+
321+1
4 19 9 12345678987654321+1
2345678987654321+12
345678987654321+123
45678987654321+1234
7 14 10 123456789109876
234567891098765
345678910987654
456789109876543
567891098765432
678910987654321
78910987654321+

Код программы

Для запроса на выполнение нажать здесь.

Решение

Дано [latex]m[/latex] строк, в каждой из которых определены последовательности, каждая из которых состоит из чисел, возрастающих от 1 до [latex]k[/latex], затем спадающих до 1 и знак «+». Закономерность данной задачи состоит в последовательном сдвиге вправо каждой последующей строки и её выведении с элемента стоящего на первом месте.

Последовательность знаков каждой строки повторяется через каждые [latex]2k[/latex] знаков. Именно поэтому на [latex]2k[/latex]-ом месте будет стоять «+» (так как отсчёт начинается с 1, а не с 0).

Определяем первый знак каждой строки сравнением номера строки [latex]i[/latex] с [latex]k[/latex]: если он меньше или равен [latex]k[/latex], то он и будет первым знаком данной строки, в противном случае — первым знаком будет [latex](2k — i)[/latex].

Затем выводим цифры каждой строки:

  • если цифра, с которой ведётся отсчёт данной строки, меньше [latex]k[/latex], то увеличиваем каждую последующую цифру (за «+» следует 1 и далее аналогично этому условию);
  • если цифра равна [latex]k[/latex], то уменьшаем последующие цифры.