ВУЗ:
Составители:
Рубрика:
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
- …
- следующая ›
- последняя »
