Задача
Найдите закономерность и напишите программу, которая выводит аналогичную таблицу для любых чисел (количество столбцов) и (количество строк).
Замечание 1. В некоторых задачах появляется дополнительный параметр .
Замечание 2. Многоточие означает продолжение последовательности. Совет. Если закономерность разгадать не получается, попробуйте воспользоваться Онлайн-энциклопедией целочисленных последовательностей.
Входные данные:
Три числа: количество столбцов и строк, параметр [latex]k[/latex].
Выходные данные:
1 2 3 4 5 6 7 8 9 |
+-------+-------+-------+ |123...k|123...k|123...k| |23...k1|23...k1|23...k1| |3...k12|3...k12|3...k12| |.......|.......|.......| |k123...|k123...|k123...| +-------+-------+-------+ |123...k|123...k|123...k| |23...k1|23...k1|23...k1| |
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 |
#include <iostream> using namespace std; int main() { int m, n, k; cin >> m >> n >> k; for (int i = 0; i < m; i++) { if (i % (k + 1) == 0) { for (int j = 0; j < n; j++) { cout << (j % (k + 1) == 0 ? "+" : "-"); } } else { for (int j = 0; j < n; j++) { if (j % (k + 1) == 0) { cout << "|"; } else { int a = (j % (k + 1) + i % (k + 1) - 1) % k; cout << (a == 0 ? k : a); } } } cout << endl; } return 0; } |
Для построения данной таблицы нужно найти закономерность чередования символов в таблице. Решение данной задачи можно осуществить с помощью двух циклов. Первый отвечает за строки, а второй — за столбцы. Пусть нумерация строк и столбцов начинается с нуля. Тогда, если номер строчки нацело делится на [latex](k+1)[/latex], то рассматриваем столбцы этой строчки. Если номер столбца нацело делится на [latex](k+1)[/latex], то записываем «+», иначе «-«. Если номер строки не делится нацело на [latex](k+1)[/latex], а номер столбца в этой строке — делится, то записываем «|». Если номер строки и столбца не делятся нацело на [latex](k+1)[/latex], то создаем переменную, с помощью которой будем заполнять таблицу цифрами. Так как, каждый столбик и каждая строка имеют свой номер, то с помощью нахождения суммы остатка от деления строки и столбца на [latex](k+1)[/latex] будем находит значение элемента, стоящего на пересечении [latex]i- [/latex]ой строки и [latex]i-[/latex]ого столбца, но этого не достаточно, в таблице есть перестановка, чтобы ее реализовать отнимаем от суммы единицу, делая этим сдвиг вправо. Также от полученного результата нужно найти остаток от деления на параметр [latex]k[/latex] для того, чтобы выполнялась правильная последовательность символов. Если результат вычисления переменной равен нулю, то записываем значение параметра [latex]k[/latex], иначе — результат вычисления переменной.
Тесты:
m | n | k |
Выходные данные: |
||
5 | 5 | 10 |
|
||
14 | 13 | 5 |
|
||
9 | 7 | 5 |
|
||
17 | 30 | 7 |
|
Код программы на ideone.com
Зачтено. Молодец.