MLoops 18

Александр Димитриев
Александр Димитриев

Latest posts by Александр Димитриев (see all)

Условие

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

1123581321345589144233377
1235813213455891442333776
2358132134558914423337761
3581321345589144233377610
5813213455891442333776109

Входные данные

В одной строке задано два числа [latex]n[/latex] и [latex]m[/latex].

Выходные данные

Вывести таблицу размерностью [latex]n\times m[/latex].

Тесты

Входные данные Выходные данные
1 1  1
2 2  
5 5
9 18
25 5

Код

Решение

Несложно догадаться что данная последовательность чисел это числа Фибоначчи. Для того чтобы построить таблицу надо сначала найти числа Фибоначчи (у меня это — [latex]a,b,c[/latex]), после печатаем их в строку далее переходим на новую строку и начинаем со 2 элемента относительно предыдущей строки это выполняет функция [latex]h[/latex], и так пока [latex]i \le m[/latex]. Но может возникнуть проблема с выходом за предел строки и для того чтобы этого не произошло нам нужны функции [latex]f[/latex], которая возводит 10 в заданную степень, это нам надо чтобы отрезать то что выходит за предел строки, для этого используем целочисленное деление на 10 в нужной степени,  и [latex]g[/latex], которая считает количество цифр в данном числе Фибоначчи, для того чтобы определить в какую степень нам надо возвести 10, чтобы оставить только ту часть что не выходит за предел строки.
Код программы

MLoops 7

Настя Панько
Настя Панько

Latest posts by Настя Панько (see all)

Задача

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

Входные данные

Два целых числа: количество столбцов и строк.

Выходные данные

Таблица [latex]m * n[/latex] со следующей закономерностью:

 

Код

 

Тесты

m n
3 4
7 7
11 11

Решение

Вводим количество строк [latex]m[/latex] и количество столбцов [latex]n[/latex]. Программа имеет два цикла — один внутри другого. Внешний цикл считывает номер строки, а внутренний — обеспечивает сдвиг. Строки и столбцы чередуются со смещением назад по 4 элемента.

Код

Ideone.com

MLoops 14

MLoops14.

Постановка задачи

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

Алгоритм решения

Легко заметить, что строки с номерами [latex]1 + i \left( k + 1 \right), i \in \mathbb{N}_0[/latex] состоят из натуральных чисел от 1 до k. Также в таблице есть столбцы, совпадающие с первой строкой. Все остальные клетки заполнены символом «+».

Тесты

Входные данные Выходные данные
[latex]n[/latex] [latex]m[/latex] [latex]k[/latex]
1 2 1
5 5 1
3 4 2
10 10 4
33 22 11

Реализация

ideone: ссылка

 

MLoops22

Молоканов Юрий
Молоканов Юрий

Latest posts by Молоканов Юрий (see all)

Условие

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

1491625364964811001211441
6919622525628932436140044
1484529576625676729784841
9009611024108911561225129

Тестирование

Входные данные Выходные данные
1 1 1 1
2 7 1 1491625
3 10 2 1491625364
9648110012
4 1 3 1
4
9
5 1 6 1
4
9
1
6
2
6 5 5 14916
25364
96481
10012
11441
7 25 4 1491625364964811001211441
6919622525628932436140044
1484529576625676729784841
9009611024108911561225129

Код

Решение

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

  • Квадраты записываются подряд без пробелов, начиная с первого столбца первой строки.
  • В каждой ячейке таблицы содержится ровно одна цифра. Таким образом, задаваемое количество столбцов можно рассматривать как требуемую длину строки.
  • Само построение таблицы представляет собой цикл, состоящий из вычисления квадрата очередного числа и его последующего вывода по одной цифре.
  • В процессе построения таблицы как минимум один раз длина текущей строки окажется равной заданному количеству столбцов. Тогда либо выполнится перевод на новую строку и продолжится вывод цифр (если количество полностью напечатанных строк будет меньше заданного), либо вывод остановится и таблица будет считается завершенной.

Опираясь на вышеперечисленное, опишем алгоритм работы цикла построения таблицы более подробно:

  1. В первую очередь проверяется условие продолжения цикла. Цикл будет выполняться до тех пор, пока количество полностью напечатанных строк (то есть строк, длина которых равна заданному количеству столбцов) будет меньше требуемого количества строк в готовой таблице.
  2. Определяется количество свободных столбцов в текущей строке. Если оно равно нулю, выполняется перевод на новую строку, количество полностью напечатанных строк увеличивается на [latex]1[/latex] и итерация цикла завершается.
  3. Определяется последовательность цифр, печатаемая в текущей итерации цикла. Если с прошлой итерации в результате переноса строки осталась «отрезанная» часть числа, то в этой итерации будет выводиться она; иначе же будет выводиться квадрат очередного натурального числа.
  4. Проверяется, сможет ли число, сформированное на предыдущем шаге, полностью уместиться в текущей строке. Если его длина меньше или равна количеству свободных столбцов, то оно выводится в поток и итерация цикла завершается; в противном случае выводится та его часть, которая может уместиться в строке, ненапечатанная часть сохраняется и будет выведена в следующей итерации (если выполнится условие продолжения цикла), количество полностью напечатанных строк увеличивается на [latex]1[/latex] и итерация цикла также завершается.

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

  • int i для хранения очередного натурального числа, квадрат которого нужно вычислить;
  • int toPrint для хранения числа, которое нужно будет выводить в очередной итерации цикла;
  • int columnsLeft для хранения числа свободных столбцов в текущей строке;
  • bool haveRest для обозначения наличия или отсутствия «отрезанной» в результате переноса строки части числа;
  • функция int GetLength(int a), возвращающая длину числа a;
  • функция int LeftPart(int a, int n), возвращающая левую часть числа a до n-той цифры включительно;
  • функция int RightPart(int a, int n), возвращающая правую часть числа a после n-той цифры.

До начала выполнения цикла присвоим переменной haveRest значение false («отрезанные» части чисел могут появится не раньше второй итерации), а переменной columnsLeft — считанное значение количества столбцов в таблице n.

Составим код цикла, следуя описанному выше алгоритму построения таблицы. Условием продолжения цикла будет наличие не напечатанных до конца строк m (в дальнейшем будем декрементировать m всякий раз при переносе строки):

Теперь выполняем проверку на наличие свободных столбцов в текущей строке. Если окажется, что в строке свободных столбцов не осталось, выполняем перенос на новую строку, после чего восстанавливаем число оставшихся столбцов (задаем переменной columnsLeft значение количества столбцов в таблице n) и указываем, что «отрезанная» часть отсутствует:

Если же свободные столбцы есть, определяем число, которое будет печататься в этой итерации. В случае, если «отрезанная» часть отсутствует, переменной toPrint присваиваем значение квадрата очередного натурального числа, иначе оставляем ее без изменений ( toPrint получает значение ненапечатанной части числа в конце цикла, если таковая имеется):

Наконец, оценим, может ли число, хранящееся в toPrint, уместиться в текущей строке. Если может, то выводим его, обновляем число свободных столбцов в строке и указываем, что «отрезанной» части числа нет:

В противном случае печатаем ту часть числа, которая помещается в строке, после чего присваиваем переменной toPrint значение ненапечатанной части, выполняем перенос строки, восстанавливаем количество свободных столбцов и указываем, что имеется «отрезанная» часть числа. Таким образом, в следующей итерации (если выполнится условие продолжения цикла) выводиться будет не очередной квадрат, а правая часть числа, которая не уместилась в предыдущей строке.

Ссылки

Код программы на Ideone.com;

Последовательность в OEIS;

Список задач на циклы.

MLoops 4

Андрей Яроцкий
Андрей Яроцкий

Latest posts by Андрей Яроцкий (see all)

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

-+-+-*-+-+-*-+-+-*-+-+-*-
+-+-*-+-+-*-+-+-*-+-+-*-+
-+-*-+-+-*-+-+-*-+-+-*-+-
+-*-+-+-*-+-+-*-+-+-*-+-+
+*-+-+-*-+-+-*-+-+-*-+-+-
*-+-+-*-+-+-*-+-+-*-+-+-*
-+-+-*-+-+-*-+-+-*-+-+-*-
+-+-*-+-+-*-+-+-*-+-+-*-+

Входные данные:

Количество столбцов [latex]n > 0[/latex] и строк [latex]m > 0[/latex].

Выходные данные:

Таблица размером [latex]n[/latex] [latex]\times[/latex] [latex]m[/latex] аналогичная таблице в условии.

Тесты:

[latex]n[/latex]   [latex]m[/latex] Таблица
1 1 1
 

2

1 7
+

+

*
3 7 1 -+-+-*-
4 10 10 -+-+-*-+-+
+-+-*-+-+-
-+-*-+-+-*
+-*-+-+-*-
-*-+-+-*-+
*-+-+-*-+-
-+-+-*-+-+
+-+-*-+-+-
-+-*-+-+-*
+-*-+-+-*-
5 25 8 -+-+-*-+-+-*-+-+-*-+-+-*-
+-+-*-+-+-*-+-+-*-+-+-*-+
-+-*-+-+-*-+-+-*-+-+-*-+-
+-*-+-+-*-+-+-*-+-+-*-+-+
-*-+-+-*-+-+-*-+-+-*-+-+-
*-+-+-*-+-+-*-+-+-*-+-+-*
-+-+-*-+-+-*-+-+-*-+-+-*-
+-+-*-+-+-*-+-+-*-+-+-*-+

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

Алгоритм решения:

Посмотрев на таблицу можно заметить, что знак «-» выводится когда номер члена последовательности нечетный, знак «+» когда четный и знак «*» когда член последовательности кратный 6. После объявления переменных [latex]n[/latex] и [latex]m[/latex](количество столбцов и строк соответственно) создаем два цикла — один внутри другого. Внешний цикл считает номер строки и, после выполнения внутреннего, переносит последовательность на новую строку. Внутренний цикл считает номер столбца и выполняет проверку на кратность шести, в этом случае выводится знак «*». В противном случае проводится проверка на кратность двум. Если номер члена последовательности кратен двум выводиться знак «+», в противном случае — «-«.

Условие задачи

Код в компиляторе

MLoops2

Алина Гончарова
Алина Гончарова

Latest posts by Алина Гончарова (see all)

Задача

Найти закономерность и написать программу, которая выводит аналогичную таблицу для любых чисел n > 0 (количество столбцов) и m > 0 (количество строк).

-*-*-*-*-*-*-*-*-*-*-*-*-
*-*-*-*-*-*-*-*-*-*-*-*-*
-*-*-*-*-*-*-*-*-*-*-*-*-
*-*-*-*-*-*-*-*-*-*-*-*-*
-*-*-*-*-*-*-*-*-*-*-*-*-
*-*-*-*-*-*-*-*-*-*-*-*-*
-*-*-*-*-*-*-*-*-*-*-*-*-
*-*-*-*-*-*-*-*-*-*-*-*-*

Решение

Для того, чтобы решить поставленную задачу, нужно сначала понять закономерность чередования символов — и * в таблице. Каждый символ имеет свой номер строки([latex]m[/latex]) и столбца([latex]n[/latex]), а чтобы определить их номера зададим счетчики [latex]i[/latex] и [latex]j[/latex]. Задача состоит из того, что нужно определить закономерность появления символа [latex]-[/latex], в остальных случаях нужно выводить символ [latex]*[/latex]. Символ [latex]-[/latex] чередуется с символом [latex]*[/latex],  и поэтому можно увидеть, что этот символ [latex]-[/latex] ставится на место, при котором сумма номеров столбцов и строк делится нацело на 2. Решить данную задачу можно с помощью тернарной операции.

Код

Тесты

Входные данные 10 10 8 5 25 8
Выходные данные -*-*-*-*-*
*-*-*-*-*-
-*-*-*-*-*
*-*-*-*-*-
-*-*-*-*-*
*-*-*-*-*-
-*-*-*-*-*
*-*-*-*-*-
-*-*-*-*-*
*-*-*-*-*-
-*-*-*-*
*-*-*-*-
-*-*-*-*
*-*-*-*-
-*-*-*-*
-*-*-*-*-*-*-*-*-*-*-*-*-
*-*-*-*-*-*-*-*-*-*-*-*-*
-*-*-*-*-*-*-*-*-*-*-*-*-
*-*-*-*-*-*-*-*-*-*-*-*-*
-*-*-*-*-*-*-*-*-*-*-*-*-
*-*-*-*-*-*-*-*-*-*-*-*-*
-*-*-*-*-*-*-*-*-*-*-*-*-
*-*-*-*-*-*-*-*-*-*-*-*-*

Задача взята отсюда.

Код программы на ideone.com.