Mloops 21

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

1+12+33+64+105+156+217+288
12+33+64+105+156+217+288+1
33+64+105+156+217+288+1+12
64+105+156+217+288+1+12+33
105+156+217+288+1+12+33+64
156+217+288+1+12+33+64+105
217+288+1+12+33+64+105+156

Тесты

[latex]m[/latex] [latex]n[/latex] Результат
1 5 13 1+12+33+64+10
12+33+64+105+
33+64+105+1+1
64+105+1+12+3
105+1+12+33+6
2 8 11 1+12+33+64+
12+33+64+1+
33+64+1+12+
64+1+12+33+
1+12+33+64+
12+33+64+1+
33+64+1+12+
64+1+12+33+
3 11 20 1+12+33+64+105+156+2
12+33+64+105+156+217
33+64+105+156+217+1+
64+105+156+217+1+12+
105+156+217+1+12+33+
156+217+1+12+33+64+1
217+1+12+33+64+105+1
1+12+33+64+105+156+2
12+33+64+105+156+217
33+64+105+156+217+1+
64+105+156+217+1+12+

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

 

Алгоритм

В данной задаче закономерностью является последовательность двенадцатиугольных чисел, общая формула которых имеет вид::

[latex]n^2+4\cdot(n^2-n)[/latex]

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

В каждой следующей строке мы сдвигаем последовательность на одно число влево.

Чтобы число столбцов [latex]n[/latex] соответствовало числу символов в каждой строке, мы выводим числа по одному, каждый раз проверяя, не превысила ли общая длина строки заданное число [latex]n[/latex]. Если длина все-таки получается больше, мы выводим то количество символов, которое помещается в данную строку, а остальные отбрасываем.

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

6 thoughts on “Mloops 21

  1. Стилистическое замечание — для лучшего восприятия следует подровнять под if и else фигурные скобки {}, а то они у вас в одних местах поставлены ровно, а в других — нет.

  2. Как я понял, вы решили использовать GNU стиль? На мой взгляд он самый сложный, трудоёмкий и вычурный. Но выбор за Вами.
    Теперь нужно строго придерживаться выбранного стиля. Фигурные скобки на отдельном уровне отступов. До скобок 2 пробела, после скобок — 1 пробел. При описании функций перед скобками отступ не делается. Тип возвращаемого значения — в отдельной строке.
    — Не следует именовать функции заглавными буквами. Нужно выбирать «говорящие» имена .
    — Пожалуйста, пишите комментарий к коду по крайней мере при определении каждой функции. Не нужно писать комментарии, которые повторяют код — return i*i+4*(i*i-i); // a_i=i*i+4*(i*i-i).


    Я понимаю, что Вы вряд ли сядете сейчас читать 800 страниц Стива Макконнелла «Совершенный код», но обязательно посмотрите здесь 3 первых коротких правила.
    — Дайте ссылку на OEIS, где описана Ваша последовательность.