Дана матрица n*m. С клавиатуры вводятся определенные координаты i-строки и j-столбца. В матрице этому элементы присваивается значение 0, остальные же элементы должны окружать его по возрастанию, например:
2 2 2 2 3 1 1 1 2 3 1 0 1 2 3 1 1 1 2 3.
Т.е. элементы окружают 0 как бы "кольцом", а остальные "кольца" возрастают на 1.
volvo
17.02.2007 20:54
Про рекурсию слышал? Вот здесь ее и можно использовать - устанавливаешь для начала все элементы матрицы в -1, а потом заданный элемент - нулевым, а соседи - на 1 больше (если старое значение все еще = -1)...
AnTiDoD
17.02.2007 21:09
Так-с про рекурсию только слышал - это по-моему когда функция вызывает саму себя? Но на практике я никогда рекурсию не использовал, потому что не знаю когда ее использовать.
Вот сделал без рекурсии, но хотелось бы узнать пример с рекурсией, чтоб понятней было:
uses crt; var a:array[1..10,1..10] of integer; i,j,n,x,y,m : integer; begin write('n='); readln(n); write('m='); readln(m); for i:=1 to n do for j:=1 to m do a[i,j]:=0; for i:=1 to n do begin for j:=1 to m do write(a[i,j],' '); writeln; end; write('i='); readln(x); write('j='); readln(y); a[x,y]:=0; for i:=1 to n do for j:=1 to m do begin if (i<>x)and(j=y) then a[i,j]:=abs(i-x); if (i=x)and(j<>y) then a[i,j]:=abs(j-y); if (i<>x) and (j<>y) then if abs(x-i)>abs(y-j) then a[i,j]:=abs(x-i) else a[i,j]:=abs(y-j);
end;
for i:=1 to n do begin for j:=1 to m do write(a[i,j],' '); writeln; end; readkey; end.
Этот вариант работает.
Это текстовая версия — только основной контент. Для просмотра полной версии этой страницы, пожалуйста, нажмите сюда.