Фонд Освітніх та Інформаційних Технологій


Скачати 136.35 Kb.
Назва Фонд Освітніх та Інформаційних Технологій
Дата 11.08.2013
Розмір 136.35 Kb.
Тип Документи
bibl.com.ua > Інформатика > Документи

Фонд Освітніх та Інформаційних Технологій

1.2. Масиви.
У наступних завданнях змінні x, у, z передбачаються опісанними як array [1..n] of integer (n - деяке натуральне число, більше 0), якщо інше не обумовлене явно.
1.2.1. Заповнити масив x нулями. (Це означає, що потрібне скласти фрагмент програми, після виконання якого все значенія x[1]..x[n] дорівнювали б нулю, незалежно від початкового значення змінної x.)
Рішення.
i := 0;

{інваріант: перші i значень x[1]..x[i] рівні 0}

while i <> n do begin

| i := i + 1;

| {x[1]..x[i-1]= 0}

| x[i]:= 0;

end;
1.2.2. Підрахувати кількість нулів в масиві x. (Скласти

фрагмент програми, що не міняє значення x, після виконання ко-

торого значення деякої цілої змінної до дорівнювало б числу

нулів серед компонент масиву x.)
Рішення.

...

{інваріант: k= число нулів серед x[1]...x[i] }

...
1.2.3. Не використовуючи оператора привласнення для масивів

скласти фрагмент програми, еквівалентний операторові x:=y.
Рішення.
i := 0;

{інваріант: значення у не змінилося, x[l]= у[l] при l <= i}

while i <> n do begin

| i := i + 1;

| x[i]:= у[i];

end;
1.2.4. Знайти максимум з x[1]..x[n].
Рішення.

i := 1; max := x[1];

{інваріант: max = максимум з x[1]..

x[i]} while i <> n do begin

| i := i + 1;

| {max = максимум з x[1]..x[i-1]}

| if x[i]> max then begin

| | max := x[i];

| end;

end;
1.2.5. Даний масив x: array [1..n] of integer, прічсм x[1]

<= x[2] <= ... <= x[n]. Знайти кількість різних чисел

елементів цього масиву.
Рішення. (1 варіант)
i := 1; до := 1;

{інваріант: до - кількість різних чисел серед x[1]..x[i]}

while i <> n do begin

| i := i + 1;

| if x[i] <> x[i-1] then begin

| | до := до + 1;

| end;

end;
(2 варіант) Шукане число на 1 більше кількості тих чисел

i з 1..n-1, для яких x[i] <> x[i+1].
до := 1;

for i := 1 to n-1 do begin

| if x[i]<> x[i+1] then begin

| | до := до + 1;

| end;

end;
1.2.6. (Повідомив А.Л.Брудно.) Прямокутне поле m на n раз-

бито на mn квадратних кліток. Деякі клітки пофарбовані в чер-

ний колір. Відомо, що всі чорні клітки можуть бути розбиті на

декілька непересічних загальних вершин чорних пря-, що не мають

моугольников. Вважаючи, що кольори кліток дані у вигляді масиву типу

array [1..m] of array [1..n] of boolean;

підрахувати число чорних прямокутників, про які йшла мова.

Число дій повинне бути порядку m*n.
Рішення. Число прямокутників рівне числу їх лівих верхніх

кутів. Чи є клітка верхнім кутом, можна дізнатися, подивившись

на її колір, а також колір верхнього і лівого сусідів. (Не за-

будьте, що їх може не бути, якщо клітка з краю.)
1.2.7. Даний масив x: array [1..n] of integer. Знайти колі-

чество різних чисел серед елементів цього масиву. (Число

дій повинно бути порядку n*n.)
1.2.8. Те ж завдання, якщо потрібний, щоб кількість

дій було порядку n* log n. (Вказівка. Дивися розділ про сорті-

ровке.)
1.2.9. Те ж завдання, якщо відомо, що всі елементи масси-

ва - числа від 1 до до і число дій повинне бути порядку n+k.
1.2.10. Даний масив x [1]..x[n] цілих чисел. Не використовуючи

інших масивів, переставити елементи масиву в зворотному поряд-

ке.
Рішення. Числа x [i] і x [n+1-i] потрібно поміняти місцями для

всіх i, для яких i < n + 1 - i, тобто 2*i < n + 1 <=> 2*i <= n

<=> i <= n div 2:

for i := 1 to n div 2 do begin

| ...обміняти x [i] і x [n+1-i];

end;
1.2.11. (з книги Д.Гріса) Даний масив цілих чисел

x[1]..x[m+n], що розглядається як з'єднання два його відрізань:

почала x[1]..x[m] довжини m і кінця x[m+1]..x[m+n] довжини n. Не іс-

пользуя додаткових масивів, переставити почало і кінець.

(Число дій порядку m+n.)
Рішення. (1 варіант). Перевернемо (розташуємо в зворотному по-

рядку) окремо почало і кінець масиву, а потім перевернемо весь

масив як єдине ціле.
(2 варіант, А.Г.Кушніренко). Розглядаючи масив записаним

по кругу, бачимо, що необхідна дія - поворот круга. Як із-

вестно, поворот є композиція двох осьових симетрій.
(3 варіант). Розглянемо більш загальне завдання - обмін два

ділянок масиву x[p+1]..x[q] і x[q+1]..x[s]. Припустимо, що

довжина лівої ділянки (назвемо його A) не більше довжини правого

(назвемо його B). Виділимо в B початок тієї ж довжини, що і A, назо-

вем його B1, а залишок B2. (Отже B = B1 + B2, якщо позначати

плюсом приписування масивів один до одного.) Нам треба з A + B1 +

B2 отримати B1 + B2 + A. Міняючи місцями ділянки A і B1 - вони іме-

ют однакову довжину, і зробити це легко, - отримуємо B1 + A + B2

і залишилося поміняти місцями A і B2. Тим самим ми звели справу до

перестановці два отрзков меншої довжини. Отже, отримуємо таку

схему програми:
p := 0; q := m; r := m + n;

{інваріант: залишилося переставити x[p+1]..x[q], x[q+1]..x[s]}

while (p <> q) and (q <> s) do begin

| {обидві ділянки непорожні}

| if (q - p) <= (s - q) then begin

| | ..переставити x[p+1]..x[q] і x[q+1]..x[q+(q-p)]

| | pnew := q; qnew := q + (q - p);

| | p := pnew; q := qnew;

| end else begin

| | ..переставити x[q-(r-q)+1]..x[q] і x[q+1]..x[r]

| | qnew := q - (r - q); rnew := q;

| | q := qnew; r := rnew;

| end;

end;
Оцінка часу роботи: на черговому кроці що залишився для обработ-

ки ділянка стає коротшою на довжину A; число дій при цьому

також пропорційно довжині A.
1.2.12. Коефіцієнти многочлена зберігаються в масиві а: array

[0..n] of integer (n - натуральне число, ступінь многочлена).

Обчислити значення цього многочлена в точці x (тобто а[n]*(x в

ступені n)+...+a[1]*x+a[0]).
Рішення. (Описуваний алгоритм називається схемою Горнера.)
до := 0; у := а[n];

{інваріант: 0 <= до <= n

y= а[n]*(x в ступені до)+...+a[n-1]*(x в ступені

k-1)+...+ + а[n-k]*(x в ступені 0)}

while k<>n do begin

| до := до + 1;

| у := у * x + а [n - до];

end;
1.2.13. (Для знайомих з основами аналізу. Повідомив А.Г.Куш-

ніренко.) Доповнити алгоритм обчислення значення многочлена

заданій точці по схемі Горнера обчисленням значення його проїз-

водною в тій же крапці.
Рішення. Додавання нового коефіцієнта відповідає пере-

ходу від многочлена P(x) до многочлена P(x)*x + с. Його похідна

у крапці x рівна P'(x)*x + P(x). (Це рішення володіє забавним

властивістю: не треба знати заздалегідь ступінь многочлена. Якщо требо-

вать виконання цієї умови, та ще просити обчислювати тільки

значення похідної, не згадуючи про сам многочлен, виходить

не таке вже просте завдання.)
1.2.14. У масивах

a:array [0..k] of integer і b: array [0..l] of integer

зберігаються коефіцієнти двох многочленів ступенів до і l. Помес-

тіть в масив з: array [0..m] of integer коефіцієнти їх проїз-

ведення. (Числа до, l, m - натуральні, m = до + l; елемент мас-

сива з індексом i містить коефіцієнт при x в ступені i.)
Рішення.
for i:=0 to m do begin

| з[i]:=0;

end;

for i:=0 to до do begin

| for j:=0 to l do begin

| | з[i+j]:= з[i+j]+ а[i]*b[j];

| end;

end;
1.2.15. Запропонований вище алгоритм перемножування многочленів

вимагає порядку n*n дій для перемножування двох многочленів

ступені n. Придумати ефективніший (для великих n) алгоритм

якому достатньо порядку (n в ступені (log 4)/(log 3))

дій.

Вказівка. Уявимо собі, що треба перемножити два многоч-

лена ступені 2k. Їх можна представити у вигляді

A(x)*x^k + B(x) і C(x)*x^k + D(x)

(тут x^k позначає x в ступені до). Твір їх рівно

A(x) C(x)*x^{2k} + (A(x) D(x)+B(x)C(x))*x^k + B(x) D(x)

Природний спосіб обчислення AC, Ad+bc, BD вимагає чотири ум-

ноженій многочленів ступеня до, проте їх кількість можна сокра-

тіть до трьох за допомогою такої хитрості: обчислити AC, BD і

(A+b)(C+d), а потім відмітити, що Ad+bc=(A+b)(C+d) -ac-bd.
1.2.16. Дано два зростаючі масиви x: array [1..k] of

integer і у: array [1..l] of integer. Знайти кількість загальних

елементів в цих масивах (тобто кількість тих цілих t, для ко-

торих t = x[i]= у[j] для деяких i і j). (Число дій по-

рядка k+l.)
Рішення.
k1:=0; l1:=0; n:=0;

{інваріант: 0<=k1<=k; 0<=l1<=l; шукана відповідь = n

+ кількість загальних елементів в x[k1+1]...x[k] і

у[l1+1]..y[l]}

while (k1 <> до) and (l1 <> l) do begin

| if x[k1+1]< у[l1+1] then begin

| | k1 := k1 + 1;

| end else if x[k1+1]> у[l1+1] then begin

| | l1 := l1 + 1;

| end else begin {x[k1+1]= у[l1+1]}

| | k1 := k1 + 1;

| | l1 := l1 + 1;

| | n := n + 1;

| end;

end;

{k1 = до або l1 = l, тому одна з множин, згаданих в

інваріанті, порожньо, а n рівне шуканій відповіді}
Зауваження. У третій альтернативі досить було б збільшувати

одну із змінних k1, l1; друга додана для симетрії.
1.2.17. Вирішити попередню задачу, якщо відомо лише, що

x[1] <= ... <= x[k] і у[1] <= ... <= у[l](зростання замінене

неубуванням).
Рішення. Умова зростання була використана в третій

альтернативі вибору: зрушивши k1 і l1 на 1, ми тим самим уменьша-

чи на 1 кількість загальних елементів в x[k1+1]...x[k] і

x[l1+1]...x[l]. Тепер це доведеться робити складніше.
...

end else begin {x[k1+1]= у[l1+1]}

| t := x [k1+1];

| while (k1

| | k1 := k1 + 1;

| end;

| while (l1

| | l1 := l1 + 1;

| end;

end;
Зауваження. Ця програма має дефект: при перевірці умови

(l1

(або другого, аналогічного) при помилковій першій дужці друга ока-

жется безглуздою (індекс вийде за межі масиву) і возник-

немає помилка. Деякі версії паскаля, обчислюючи (A and B), снача-

ла обчислюють A і при помилковому A не обчислюють B. (Так поводиться

наприклад, система Turbo Pascal, 5.0 - але не 3.0.) Тоді опісан-

ная помилка не виникне.

Але якщо ми не хочемо покладатися на таку властивість іспользу-

емой нами реалізації паскаля (не передбачене його автором

Н.Віртом), то можна поступити так. Введемо додаткову пере-

менную b: boolean і напишемо:
if k1 < до then b := (x[k1+1]=t) else b:=false;

{b = (k1

while b do begin

| k1:=k1+1;

| if k1 < до then b := (x[k1+1]=t) else b:=false;

end;
Можна також зробити інакше:
end else begin {x[k1+1]= у[l1+1]}

| if k1 + 1 = до then begin

| | k1 := k1 + 1;

| | n := n + 1;

| end else if x[k1+1]= x [k1+2]

then begin | | k1 := k1 + 1;

| end else begin

| | k1 := k1 + 1;

| | n := n + 1;

| end;

end;
Так буде коротше, хоча менш симетрично.
Нарешті, можна збільшити розмір масиву в його описі

включивши в нього фіктивні елементи.
1.2.18. Дано два неубутні масиви x: array [1..k] of

integer і у: array [1..l] of integer. Знайти число різних еле-

ментів серед x[1],...,x[k], у[1],...,y[l]. (Число дій по-

рядка k+l.)
1.2.19. Дано два масиви x[1] <= ... <= x[k] і у[1] <= ...

<= у[l]. "З'єднати" їх в масив z[1] <= ... <= z[m](m = k+l;

кожен елемент повинен входити в масив z стільки раз, скільки

раз він входить в цілому в масиви x і у). Число дій

порядку m.
Рішення.
k1 := 0; l1 := 0;

{інваріант: відповідь вийде, якщо до z[1]..z[k1+l1]

приписати справа з'єднання масивів x[k1+1]..x[k] і у[l1+1]..

y[l]} while (k1 <> до) or (l1 <> l) do begin

| if k1 = до then begin

| | {l1 < l}

| | l1 := l1 + 1;

| | z[k1+l1]:= у[l1];

| end else if l1 = l then begin

| | {k1 < до}

| | k1 := k1 + 1;

| | z[k1+l1]:= x[k1];

| end else if x[k1+1] <= у[l1+1] then begin

| | k1 := k1 + 1;

| | z[k1+l1]:= x[k1];

| end else if x[k1+1] >= у[l1+1] then begin

| | l1 := l1 + 1;

| | z[k1+l1]:= у[l1];

| end else begin

| | { такого не буває }

| end;

end;

{k1 = до, l1 = l, масиви сполучені}
Цей процес можна пояснити так. Хай у нас є дві стопки

карток, відсортованих за абеткою. Ми сполучаємо їх в одну

стопку, вибираючи кожного разу ту з верхніх карток обох стопок

яка йде раніше в алфавітному порядку.
1.2.20. Дано два масиви x[1] <= ... <= x[k] і у[1] <= ...

<= у[l]. Знайти їх "перетин", тобто масив z[1] <= ... <=

z[m], що містить їх загальні елементи, причому кратність кожного

елементу в масиві z дорівнює мінімуму з його кратностей в мас-

сивах x і у. Число дій порядку k+l.
1.2.21. Дано два масиви x[1]<=...<=x[k] і у[1]<=...<=y[l]

і число q. Знайти суму виду x[i]+y[j], найбільш близьку до числа

q. (Число дій порядку k+l, додаткова пам'ять - фіксиро-

ванне число цілих змінних, самі масиви міняти не разрешаєт-

ця.)

Вказівка. Треба знайти мінімальну відстань між елемента-

мі x[1]<=...<=x[k] і q-y[l]<=..<=q-y[1], що неважко зробити в

ході їх злиття в один (уявний) масив.
1.2.22. (з книги Д.Гріса) Деяке число міститься в

кожному з трьох цілочисельних неубутних масивів x[1] <= ... <=

x[p], у[1] <= ... <= у[q], z[1] <= ... <= z[r]. Знайти одне

таких чисел. Число дій повинне бути порядку p + q + r.
Рішення.
p1:=1; q1=1; r1:=1;

{інваріант: x[p1]..x[p], у[q1]..y[q], z[r1]..

z[r] містять загальний елемент }

while not ((x[p1]=y[q1]) and (у[q1]=z[r1]))

do begin | if x[p1]<�у[q1] then begin

| | p1:=p1+1;

| end else if у[q1]

| | q1:=q1+1;

| end else if z[r1]

| | r1:=r1+1;

| end else begin

| | { так не буває }

| end;

end;

{x[p1]= у[q1]= z[r1]}

writeln (x[p1]);
1.2.23. Те ж завдання, тільки заздалегідь не відомо, существу-

чи ет загальний елемент в трьох неубутних масивах і потрібне це

з'ясувати (і знайти один із загальних елементів, якщо вони є).
1.2.24. Елементами масиву а[1..n] є неубутні

масиви [1..m] цілих чисел (а: array [1..n] of array [1..m] of

integer; а[1][1] <= ... <= а, ..., а[n][1] <= ... <=

а[n][m]). Відомо, що існує число, що входить у все масси-

ви а[i] (існує таке х, що для всякого i з [1..n]

найдстся j з [1..m], для якого а[i][j]=x). Знайти одне з та-

ких чисел х.
Рішення. Введемо масив b[1]..b[n], що відзначає почало "оста-

ющейся частини" масивів а[1]..a[n].
for k:=1 to n do begin

| b[k]:=1;

end;

eq := true;

for до := 2 to n do begin

| eq := eq and (а[1][b[1]]= а[k][b[k]]);

end;

{інваріант: частини, що залишилися, перетинаються,

тобто існує таке х, що для всякого i з [1..n] найдстся

j з [1..m], не менше b[i], для якого а[i][j]= х; eq

<=> перші елементи частин, що залишилися, рівні}

while not eq do begin

| s := 1; до := 1;

| {а[s][b[s]] - мінімальне серед а[1][b[1]]..a[k][b[k]]}

| while до <> n do begin

| | до := до + 1;

| | if а[k][b[k]]< а[s][b[s]] then begin

| | | s := до;

| | end;

| end;

| {а[s][b[s]] - мінімальне серед а[1][b[1]]..a[n][b[n]]}

| b [s] := b [s] + 1;

| for до := 2 to n do begin

| | eq := eq and (а[1][b[1]]= а[k][b[k]]);

| end;

end;

writeln (а[1][b[1]]);
1.2.25. Приведене рішення попередньої задачі вимагає по-

рядка m*n*n дій. Придумати спосіб з числом дій порядку

m*n.

Вказівка. Доведеться пожертвувати симетрією і вибрати одну

з рядків за основну. Рухаючись по основному рядку, підтримуваний

таке співвідношення: у решті всіх рядків відмічений макси-

мальний елемент, що не перевершує поточного елементу основної

рядки.
1.2.26. (Двійковий пошук) Дана послідовність x[1] <=

... <= x[n] цілих чисел і число а. З'ясувати, чи міститься а в

цій послідовності, тобто чи існує i з 1..n, для ко-

торого x[i]=a. (Кількість дій порядку log n.)
Рішення. (Припускаємо, що n > 0.)
l := 1; r := n+1;

{якщо а є взагалі, тобто і серед x[l]..x[r-1], r > l}

while r - l <> 1 do begin

| m := l + (r-l) div 2 ;

| {l < m < r }

| if x[m] <= а then begin

| | l := m;

| end else begin {x[m]> а}

| | r := m;

| end;

end;

(Звернете увагу, що і у разі x[m]= а інваріант не наруша-

ется.)

Кожного разу r-l зменшується приблизно удвічі, звідки і витека-

ет необхідна оцінка числа дій.

Зауваження.

l + (r-l) div 2 = (2l + (r-l)) div 2 = (r+l) div 2.
1.2.27. (З книги Д.Гріса) Даний масив x: array [1..n] of

array [1..m] of integer, впорядкований по "рядках" і по

"стовпцям":

x[i][j] <= x[i+1][j]

x[i][j] <= x[i][j+1]

і число а. Потрібно з'ясувати, чи зустрічається а серед x[i][j].
Рішення. Уявляючи собі масив а як матрицю (прямо-

косинець, заповнений числами), ми виберемо прямокутник, в ко-

тором тільки і може міститися а, і його звужуватимемо.

Прямо- косинець цей міститиме x[i][j] при 1<=i<=l і k<=j<=m.

1 до m

-----------------------------------

1| |***********|

| |***********|

| |***********|

l| |***********|

|---------------------------------|

| |

n| |

-----------------------------------

(допускаються порожні прямокутники при l = 0 і до = m+1).
l:=n; k:=1;

{l>=0, k<=m+1, якщо а є, то в описаному прямокутнику}

while (l > 0) and (до < m+1) and (x[l][k] <> а) do begin

| if x[l][k]< а then begin

| | до := до + 1; {лівий стовпець не містить а,

видаляємо його}

| end else begin {x[l][k]> а}

| | l := l - 1; {нижній рядок не містить а, видаляємо її}

| end;

end;

{x[l][k]= а або прямокутник порожній }

answer:= (l > 0) and (до < m+1) ;
Зауваження. Тут та ж помилка: x[l][k] може опинитися не-

визначеним. (Ес виправлення надається читачеві.)
1.2.28. (Московська олімпіада по програмуванню) Даний не-

убуваючий масив позитивних цілих чисел а[1] <= а[2] <=...<=

а[n]. Знайти найменше ціле позитивне число, не представі-

моє у вигляді суми декількох елементів цього масиву (кожен еле-

мент масиву може бути використаний не більше одного разу). Число

дій порядку n.
Рішення. Хай відомо, що числа, уявні у вигляді

суми елементів а[1],...,a[k], заповнюють відрізок від 1 до некото-

рого N. Якщо а[k+1]> N+1, то N+1 і буде мінімальним числом, не

уявним у вигляді суми елементів масиву а[1]..a[n]. Якщо ж

а[k+1] <= N+1, то числа, уявні у вигляді суми елементів

а[1]..a[k+1], заповнюють відрізок від 1 до N+a[k+1].
до := 0; N := 0;

{інваріант: числа, уявні у вигляді суми елементів

масиву а[1]..a[k], заповнюють відрізок 1..N}

while (до <> n) and (а[k+1] <= N+1) do begin

| N := N + а[k+1];

| до := до + 1;

end;

{(до = n) або (а[k+1]> N+1); у обох випадках відповідь N+1}

writeln (N+1);
(Знову той же дефект: у умові циклу за помилкової першої умови

друге не визначене.)
1.2.29. (Для знайомих з основами алгебри) У цілочисельному

масиві а[1]..a[n] зберігається перестановка чисел 1..n (кожне з

чисел зустрічається по одному разу).

(а) Визначити парність перестановки. (І в (а), і в (б) ко-

лічество дій порядку n.)

(б) Не використовуючи інших масивів, замінити перестановку

зворотну (якщо до роботи програми а[i]=j, то після повинно бути

а[j]=i).
Вказівка. (а) Парність перестановки визначається колі-

чеством циклів. Щоб відрізняти вже пройдені цикли, у їх еле-

ментів можна, наприклад, міняти знак. (б) Звернення проводимо по

циклам.
1.2.30. Даний масив а[1..n] і число b. Переставити числа

масиві так, щоб зліва від деякої межі стояли

числа, менші або рівні b, а праворуч від межі - великі або

рівні b.
Рішення.
l:=0; r:=n;

{інваріант: а[1]..a[l]<=b; а[r+1]..

a[n]>=b} while l <> r do begin

| if а[l+1] <= b then begin

| | l:=l+1;

| end else if а[r] >=b then begin

| | r:=r-1;

| end else begin {а[l+1]>b; а[r]

| | поміняти а[l+1] і а[r]

| | l:=l+1; r:+r-1;

| end;

end;
1.2.31. Те ж завдання, але потрібний, щоб спочатку йшли еле-

менти, менші b, потім рівні b, а лише потім великі b.
Рішення. Тепер буде потрібно три межі: до першої будуть

йти елементи, менші b, від першої до другої - рівні b, потім

невідомо які до третьої, а після третьої - великі b. (Більш

симетричне рішення використовували б чотири межі, але навряд чи

гра коштує свічок.) Як черговий даного елемен-

та беремо елемент праворуч від середньої межі.
l:=0; m:=0; r:=n;

{інваріант: а[1..l]


a[n]>b} while m <> r do begin

| if а[m+1]=b then begin

| | m:=m+1;

| end else if а[m+1]>b then begin

| | обміняти а[m+1] і а[r]

| | r:=r-1;

| end else begin {а[m+1]

| | обміняти а[m+1] і а[l+1]

| | l:=l+1; m:=m+1;

end;
1.2.32. (варіант попереднього завдання, названий в книзі

Дейкстри завданням про голландський прапор) У масиві коштують числа 0, 1

і 2. Переставити їх в порядку зростання, якщо єдиною

дозволеною операцією (крім читання) над масивом є пе-

рестановка двох елементів.
1.2.33. Даний масив а[1]..a[n] і число m<=n. Для кожної

групи з m членів, що стоять поряд (таких груп, очевидно, n-m+1)

обчислити її суму. Загальне число дій повинне бути порядку n.
Рішення. Переходячи від групи до сусідньої, ми додаємо один

член, а іншою віднімаємо.
1.2.34. Дана квадратна таблиця а[1..n][1..n] і число m<=n.

Для кожного квадрата розміру m на m в цій таблиці обчислити

суму чисел, що стоять в нім. Загальне число дій повинне бути по-

рядка n*n.
Рішення. Спочатку для кожного горизонтального прямокутника

розміром n на 1 обчислюємо суму чисел, що стоять в нім. (При зрушенні

такого прямокутника по горизонталі на 1 потрібно додати одне

число і одне відняти.) Потім, використовуючи ці суми, обчислюваний

суми в квадратах. (При зрушенні квадрата по вертикалі додається

смужка, а інша смужка збавляється.)

Oleksa.Inc

Схожі:

Фонд Освітніх та Інформаційних Технологій
Обробка послідовності дробових чисел'); writeln('Після введення кожного числа натискайте '); sum:=0
Фонд Освітніх та Інформаційних Технологій
Оголосите змінні, необхідні для обчислення вартості покупки, що складається з декількох зошитів, олівців і лінійки
Фонд Освітніх та Інформаційних Технологій
Дані дві цілі змінні а, b. Скласти фрагмент програми, після виконання якого значення змінних поменя
Фонд Освітніх та Інформаційних Технологій
Середнє зростання: ',sred: 6: 1', см'; writeln ГУ ',m,'-x учнів зростання перевищує ', 'середній.'
Фонд Освітніх та Інформаційних Технологій
Проте, в Turbo Pascal аргумент функції Sin повинен бути виражений в радіанах (1 радий. = 180 1415925, де 1415926 число "ПІ").)
Фонд Освітніх та Інформаційних Технологій
Проте, в Turbo Pascal аргумент функції Sin повинен бути виражений в радіанах (1 радий. = 180 1415925, де 1415926 число "ПІ").)
ВИКОРИСТАННЯ НОВІТНІХ ІНФОРМАЦІЙНИХ ТЕХНОЛОГІЙ НА УРОКАХ ФІЗИКИ
Для гармонійного поєднання останніх досягнень інформаційних технологій та шкільного курсу вивчення фізики постає проблема створення...
Фонд Освітніх та Інформаційних Технологій
Якщо на одну шальку терезів посадити Даринку, яка важить кілограмів, і Наталку, яка важить на 5 кілограмів менше, а на іншу насипати...
СТВОРЕННЯ ОСВІТНЬОГО СЕРЕДОВИЩА ДЛЯ ПІДГОТОВКИ ПЕДАГОГІВ ЗАСОБАМИ ІНФОРМАЦІЙНИХ ТЕХНОЛОГІЙ
Т педагогічних наук, доцент кафедри інноваційних та інформаційних технологій. Шевченко Людмила Станіславівна – кандидат педагогічних...
Лекція Інформатизація діяльності інформаційних установ
Лекція Інформатизація діяльності інформаційних установ. Електронний документний фонд як модель управління інформаційними ресурсами....
Додайте кнопку на своєму сайті:
Портал навчання


При копіюванні матеріалу обов'язкове зазначення активного посилання © 2013
звернутися до адміністрації
bibl.com.ua
Головна сторінка