Задача
Найти закономерность и написать программу, которая выводит аналогичную таблицу для любых чисел [latex]n>0[/latex] (количество столбцов) и [latex]m>0[/latex] (количество строк).
Входные данные
Два числа:количество столбцов и строк.
Выходные данные
Таблица размером n*m со следующей закономерностью:
+21++21++21++21++21++21++
1++21++21++21++21++21++21
+21++21++21++21++21++21++
1++21++21++21++21++21++21
+21++21++21++21++21++21++
1++21++21++21++21++21++21
+21++21++21++21++21++21++
1++21++21++21++21++21++21
Код
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 |
#include <iostream> using namespace std; int main(){ int m,n; cin>>n>>m; for(int i=1;i<m+1;i++){ for(int j=1;j<n+1;j++){ if(i%2==0){ if ((j+3)%4==0) cout<< "1"; else cout<<(j%4==0?"2":"+"); } else{ if ((j+1)%4==0) cout<<"1"; else cout<<((j+2)%4==0?"2":"+"); } } cout<<endl; } return 0; } |
Упрощенный вариант
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 |
#include <iostream> using namespace std; int main() { int m,n; cin>>n>>m; for(int i=1;i<m+1;i++) { for(int j=1;j<n+1;j++) { if( ((i%2==0) && ((j+3)%4==0))||((i%2!=0) && ((j+1)%4==0))) { cout<< "1"; } if ((j+3-2*(i%2))%4!=0) { cout<<((j+2*(i%2))%4==0?"2":"+"); } } cout<<endl; } return 0; } |
Тесты
[latex]n[/latex] | [latex]m[/latex] | Выходные данные |
1 | 1 | + |
7 | 7 | +21++21
1++21++ +21++21 1++21++ +21++21 1++21++ +21++21
|
15 | 6 | +21++21++21++21
1++21++21++21++ +21++21++21++21 1++21++21++21++ +21++21++21++21 1++21++21++21++
|
25 | 8 | +21++21++21++21++21++21++
1++21++21++21++21++21++21 +21++21++21++21++21++21++ 1++21++21++21++21++21++21 +21++21++21++21++21++21++ 1++21++21++21++21++21++21 +21++21++21++21++21++21++ 1++21++21++21++21++21++21 |
Решение
Для решения сначала нужно найти закономерность чередования символов в таблице. Пусть нумерация столбцов и строк будет начинаться с единицы, тогда, если строка [latex]i \vdots 2[/latex], то символы в ней чередуются по такому принципу: если результат от прибавления номера столбца к 1 кратен 4 ([latex] (j+1)\vdots 4 [/latex]), то в данной строке и столбце находится «1», если же результат от прибавления номера столбца к 2 кратен 4([latex] (j+2)\vdots 4 [/latex]), то в данной строке и столбце находится «2», если ни одно из этих условий не выполняется, значит на данном месте находится «+».
Если же строка [latex]i\vdots 2[/latex], то символы в ней чередуются по такому принципу: если результат от прибавления номера столбца к 3 кратен 4 ([latex] (j+3)\vdots 4[/latex]), то в данной строке и столбце находится «1», а если номер столбца кратен 4([latex] j\vdots 4 [/latex]), то в данной строке и столбце находится «2», если ни одно из этих условий не выполняется, значит на данном месте находится «+».
— Кажется самое сложное для Вас в программировании это правильные отступы. Попробуйте разобраться в чём причина. Непонимание или невнимательность?
— Строка не может быть кратна двум или другому числу. Очевидно Вы имеете в виду номер строки.
— У Вас почти один и тот же код повторяется в двух ветках внешнего условного оператора. Можете попробовать упростить?
Игорь Евгеньевич, постаралась упростить, избавившись от повторений.
Хорошо. Зачтено.