ВУЗ:
Составители:
Рубрика:
183
1 0 0 0 1
0 1 0 1 0
0 0 1 0 0.
Решение 1. Можно решить эту задачу, используя описанные ранее идеи.
Заметим, что единицы в массиве-результате составляют ромб, две стороны
которого параллельны главной диагонали и отстоят от нее на (n+1) div 2-1. Обе эти
диагонали можно описать уравнением |i-j|=(n+1) div 2-1. Две другие стороны ромба
параллельны побочной диагонали массива. Диагональ, лежащая выше побочной
диагонали, описывается уравнением |i+j|=n-(n+1) div 2+2,
а диагональ, лежащая
ниже побочной, - |i+j|=n+(n+1) div 2. Это решение можно оформить следующим
фрагментом:
k:=(n+1) div 2;
for i:=1 to n do
for j:=1 to n do
if (abs(i-j)=k-1) or (abs(i+j)=n-k+2) or (abs(i+j)=n+k)
then a[i,j]:=1
else a[i,j]:=0.
Решение 2. Можно подойти к решению этой задачи по-другому. Представим,
что единицы в массиве изображают график функции |x|+|y|=k-1, смещенный
относительно начала координат на k (рис. 11.2). Обозначим ось x через i, а ось y
через j. Тогда все элементы массива, равные единице, будут удовлетворять
уравнению |i-k|+|j-k|=k-1.
5
4
3
2
1
1 2 3 4 5
0 0 1 0 0
0 1 0 1 0
1 0 0 0 1
0 1 0 1 0
0 0 1 0 0
Ось i
Ось j
Рис. 11.2
Ниже приводится фрагмент, реализующий решение 2:
for i:=1 to n do
for j:=1 to n do
if abs(i-k)+abs(j-k)=k-1
then a[i,j]:=1
else a[i,j]:=0.
Пример 11.37. Найти индексы максимального элемента двумерного массива.
Решение. Идея решения этой задачи совпадает с идеей решения задачи для
одномерного массива. Отличие заключается в необходимости для двумерного
массива вложенных циклов перебора. Фрагмент программы приведен ниже:
183 10001 01010 0 0 1 0 0. Решение 1. Можно решить эту задачу, используя описанные ранее идеи. Заметим, что единицы в массиве-результате составляют ромб, две стороны которого параллельны главной диагонали и отстоят от нее на (n+1) div 2-1. Обе эти диагонали можно описать уравнением |i-j|=(n+1) div 2-1. Две другие стороны ромба параллельны побочной диагонали массива. Диагональ, лежащая выше побочной диагонали, описывается уравнением |i+j|=n-(n+1) div 2+2, а диагональ, лежащая ниже побочной, - |i+j|=n+(n+1) div 2. Это решение можно оформить следующим фрагментом: k:=(n+1) div 2; for i:=1 to n do for j:=1 to n do if (abs(i-j)=k-1) or (abs(i+j)=n-k+2) or (abs(i+j)=n+k) then a[i,j]:=1 else a[i,j]:=0. Решение 2. Можно подойти к решению этой задачи по-другому. Представим, что единицы в массиве изображают график функции |x|+|y|=k-1, смещенный относительно начала координат на k (рис. 11.2). Обозначим ось x через i, а ось y через j. Тогда все элементы массива, равные единице, будут удовлетворять уравнению |i-k|+|j-k|=k-1. Ось j 5 0 0 1 0 0 4 0 1 0 1 0 3 1 0 0 0 1 2 0 1 0 1 0 1 0 0 1 0 0 1 2 3 4 5 Ось i Р ис. 11.2 Ниже приводится фрагмент, реализующий решение 2: for i:=1 to n do for j:=1 to n do if abs(i-k)+abs(j-k)=k-1 then a[i,j]:=1 else a[i,j]:=0. Пример 11.37. Найти индексы максимального элемента двумерного массива. Решение. Идея решения этой задачи совпадает с идеей решения задачи для одномерного массива. Отличие заключается в необходимости для двумерного массива вложенных циклов перебора. Фрагмент программы приведен ниже:
Страницы
- « первая
- ‹ предыдущая
- …
- 179
- 180
- 181
- 182
- 183
- …
- следующая ›
- последняя »