Задача
Заполнить матрицу заданного размера [latex]M(k,l)[/latex] числами 1, 2, 3, 4 так, чтобы по горизонтали, вертикали и диагонали не было одинаковых рядом стоящих чисел.
Тесты
[latex]k[/latex] | [latex]l[/latex] | Output | ||
6 | 6 |
|
||
5 | 5 |
|
Код программы
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 |
class Test { static function main() { //Кол-во строк var k:Int = Std.parseInt(Sys.stdin().readLine()); //Кол-во столбцов var l:Int = Std.parseInt(Sys.stdin().readLine()); var array:Array<Array<Int>> = [ for(i in 0...k) [ for(j in 0...l) (j + 2 * (i % 2)) % 4 + 1 ] ]; // Выводим массив for (x in 0...k) { var line = ""; for (y in 0...l){ line += Std.string(array[x][y]); var addLine = " | "; if (array[x][y] < 10) { addLine = " | "; } line += addLine; } trace(line); } } } |
Алгоритм решения
Заполняем массив с помощью формулы (j + 2 * (i % 2)) % 4 + 1. При i четном 2 * (i % 2) будет обращаться в 0. То есть в нечетных строках будут числа 1, 2, 3, 4 подряд, а в четных строках будут меняться цифры 1 на 3, 2 на 4, 3 на 1, 4 на 2.
Решение задачи на Try Haxe !
Решение этой задачи на С++ и Java.
Денис Швецов недавно публиковал (посмотреть все)
- e-olymp 2164. Шифр Юлия - 01.06.2017
- А137д - 01.06.2017
- Ю 4.25 - 13.05.2017
Вам не удалось опубликовать код программы. Разве Вы сами не видите, что там написано?
Исправил.
Очень хорошо, что использовал специфические возможности языка.
Зачтено.