Создать двумерный статический массив 20*20. Его необходимо заполнить как шахматную доску. Не знаю как реализовать заполнение, т.е. чтобы белые цвета были "1", а черные "0".
APAL
30.05.2013 12:46
Подозреваю, что если исследовать сумму индексов элемента массива на четность/нечетность, то можно заполнить массив.
Ромаха
30.05.2013 15:32
APAL, хорошая идея
Но представим что нам надо заполнить N*N клеток. (где N <= 1 000 000) Тогда мы должны будем проверить каждую клетку, что, возможно, не будет являться самым эффективным алгоритмом. Поэтому можно учитывать координаты только I-того, 1-го элемента матрицы. И в соответствии с ним заполнять остальные элементы строки.
APAL
30.05.2013 21:57
Цитата(Ромаха @ 30.05.2013 12:32)
Но представим что нам надо заполнить N*N клеток. (где N <= 1 000 000) Тогда мы должны будем проверить каждую клетку, что, возможно, не будет являться самым эффективным алгоритмом. Поэтому можно учитывать координаты только I-того, 1-го элемента матрицы. И в соответствии с ним заполнять остальные элементы строки.
Хорошо, расширим задачу до N... т.е. попытаемся уйти от сложения больших чисел: Используем рекурсию!
Код(Показать/Скрыть)
Const N=20; Var M : array[1..N,1..N] of Byte; i,j : Byte;
Procedure ChessLeft(x,y : Byte); Begin If (x<=N) and (y<=N) and ((x>0) and (y>0)) then Begin M[x,y]:=1; ChessLeft(x-1,y+1); end; end;
Procedure ChessRight(x,y : Byte); Begin If (x<=N) and (y<=N) and ((x>0) and (y>0)) then Begin M[x,y]:=1; ChessRight(x+1,y-1); end; end;
Procedure Chess(x,y : Byte); Begin If (x<=N) and (y<=N) and ((x>0) and (y>0)) then Begin M[x,y]:=1; ChessLeft(x-1,y+1); ChessRight(x+1,y-1); Chess(x+1,y+1); end; end;
Begin Writeln; For i:=1 to N do For j:=1 to N do M[i,j]:=0; Chess(1,1); For i:=1 to N do Begin For j:=1 to N do Write(M[i,j]); Writeln; end; end.
APAL
5.06.2013 15:04
Кстати, если все таки подходить к решению именно как к шахматной доске (или хотя бы чтобы количество строк/столбцов было четным), то не обязательно перебирать в цикле весь массив:
For i:=1 to N div 2 do For j:=1 to N do If odd(j) then m[i*2-1,j]:=1 else m[i*2,j]:=1;
Это текстовая версия — только основной контент. Для просмотра полной версии этой страницы, пожалуйста, нажмите сюда.