До І етапу Всеукраїнської олімпіади




Скачати 186.59 Kb.
НазваДо І етапу Всеукраїнської олімпіади
Дата конвертації31.01.2014
Розмір186.59 Kb.
ТипДокументы
uchni.com.ua > Інформатика > Документы
Задачі

до І етапу Всеукраїнської олімпіади

з інформатики.

  1. Множники (30 балів)

Умова:

Розкласти число на прості множники.

Технічні вимоги:

1. Задане число вводиться з клавіатури.

2. Відповідь подати у вигляді виразу: n=2*2*3…

Рекомендації:

Ідея розкладання на множники дуже проста. Задачу будемо розв’язувати методом перебору. Спочатку перевірятимемо подільність числа на 2. Якщо число ділиться на 2 то будемо виводити на екран цей простий множник. Далі перевірятимемо подільність на 3, 5, 7 і т.д. Введемо змінну s для контролю порядкового номера множника. Якщо s=0, то це перший множник і виведемо його у вигляді «і», а якщо s≠0, то у вигляді «*і».

Розв’язок:

Program mnojnuku;

Var

s,i,n : integer;

Begin

s:=0;

WriteLn( 'Розклад числа на множники' );

Write( 'ВВедіть число N=' );

Read( n);

WriteLn;

Write('Число ',n,'=' );

While n mod 2=0 do

Begin

s:=s+1;

If s=1 then

Write( 2 )

else

Write( '*',2 );

n:=n div 2

end;

i:=3;

While i<=n do

If n mod i=0 then

Begin

s:=s+1;

If s=0 then

Write( i )

else

Write( '*',i );

n:=n div i;

end

else

i:=i+2;

ReadLn;

end.

Тести:

№ п/п

Вхідні дані

Результати

Кількість балів



64

64=2*2*2*2*2*2

2



525

525=3*5*5*7

4



877

877=877

6



100000

100000=2*2*2*2*2*5*5*5*5*5

8



1234567890

1234567890=2*3*3*5*3607*3803

10




  1. ^ Піраміда (25 балів)

Умова:

Дано правильну чотирикутну піраміду, яка заповнена кульками. Основа піраміди – квадрат, сторона якого дорівнює N діаметрам кульок (N≤50). Усі наступні шари до вершини піраміди також мають форму квадрата, але довжина сторони квадрата кожного шару зменшується на один діаметр кульки. У вершині піраміди – 1 кулька. Визначити кількість кульок, яка необхідна для побудови піраміди із N шарів.

Технічні вимоги:

1. Файл даних ball.dat містить натуральне число, яке вказує кількість шарів для побудови піраміди.

2. Файл результатів ball.rez містить натуральне число – кількість кульок у побудованій піраміді.

Рекомендації:

Оскільки кожен шар піраміди має форму квадрата, то щоб знайти кількість кульок кожного ряду потрібно піднести до квадрату число кульок, що вміщаються по довжині квадрата. В свою чергу ця кількість дорівнює порядковому номеру шару, якщо починати рахувати з вершини піраміди. Тобто 1 шар – 12=1, 2 шар – 22=4, 3 шар 32=9 і т.д.

Розв’язок:

Program piramida;

Var

f,f1:text;

n,i,s :integer;

Begin

s:=0;

Assign( f,'ball.dat' );

Reset( f );

Assign( f1,'ball.rez' );

Rewrite( f1 );

Read( f,n);

Close( f );

For i:=1 to n do

s:=s+sqr(i);

Write( f1,s );

Close( f1 );

ReadLn;

end.

Тести:

№ п/п

Вхідні дані

Результати

Кількість балів



1

1

2



2

5

3



8

204

4



50

42925

6



100

338350

10




  1. Остачі (25 балів)

Умова:

Гравець задумує ціле число від 1 до 1000 і обчислює остачу від ділення цього числа на 5, 7, 11 і повідомляє ці остачі програмі. Програма повинна визначити задумане число.

Технічні вимоги:

1. Задане число вводиться з клавіатури.

2. Відповіддю повинно бути задумане число.

Рекомендації:

Дану задачу будемо розв’язувати методом перебору. Для кожного числа з діапазону 1..1000 будемо порівнювати остачі від ділення на 5,7,11 з остачами від ділення, запропонованими гравцем.

Розв’язок:

Program ostachi;

Var

r5,r7,r11,a,b,c,x,a1,b1,c1,k : integer;

Begin

WriteLn( 'Введіть остачі від ділення,r5,r7,r11' );

ReadLn( r5,r7,r11 );

k:=0;

For x:=1 to 1000 do

begin

a:=x div 5;

b:=x div 7;

c:=x div 11;

a1:=a*5+r5;

b1:=b*7+r7;

c1:=c*11+r11;

if ((a1=b1) and (r5=x mod 5)) and ((c1=b1) and (r7=x mod 7)) and ((c1=a1) and (r11=x mod 11)) then

begin

WriteLn( 'Задумане число:',x) ;

k:=1;

end;

end;

If k=0 then

WriteLn( 'Ви помилились. Спробуйте ще' );

ReadLn;

end.

Тести:

№ п/п

Вхідні дані

Результати

Кількість балів



0 3 10

Задумане число: 10

Задумане число: 395

Задумане число: 780

2



0 0 0

Задумане число: 385

Задумане число: 770

3



1 1 1

Задумане число: 386

Задумане число: 771

4



4 6 10

Задумане число: 384

Задумане число: 769

6



10 10 10

Ви помилились. Спробуйте ще.

10




  1. ^ Число (10 балів)

Умова:

Перевірити чи існують такі двозначні числа ab і cd для яких виконується умова: ab*cd=abcd.

Технічні вимоги:

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

Рекомендації:

Задача розв’язується методом перебору двозначних чисел від найменшого до найбільшого, тобто від 10 до 99. Для кожної пари двозначних чисел перевіряється умова: ab*cd=abcd. Крім того потрібно ввести змінну flag, щоб у разі не знаходження такої пари вивести повідомлення, що таких чисел не має.

Розв’язок:

Program chuslo;

Var

ab,cd,flag : integer;

Begin

flag:=0;

For ab:=10 to 99 do

For cd:=10 to 99 do

If ab*cd=ab*100+cd then

Begin

WriteLn( ab,' ',cd );

flag:=1;

end;

if flag=0 then

WriteLn( 'Таких чисел немає' );

ReadLn;

end.

№ п/п

Вхідні дані

Результати

Кількість балів






Таких чисел немає

10




  1. Слова (30 балів)

Умова:

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

Технічні вимоги:

1. Заданий рядок символів вводиться з клавіатури.

Рекомендації:

Для розв’язування задачі доведеться скористатися функцією виділення слова. Функція перевіряє поточний символ (його номер переданий як вхідний параметр) і якщо це символ, що входить до множини розділових знаків, ігноруємо його, у протилежному випадку додаємо до рядка, що формуємо. Це і буде шукане слово, яке повертається функцією. параметром, що передається може бути і рядок у якому шукається слово. Після того як слово виділили, потрібно перевірити, чи має воно задану властивість. Змінна логічного типу flag залишається істинною, якщо не було знайдено жодного такого слова і стає хибною у протилежному випадку.

Розв’язок:

Program slowa;

Const

vowel : set of char=['а','я','і','и','о','у','ю','е','є','ї','А','Я','І','И','О','У','Ю','Е','Є','Ї'];

Var i : integer; s,temp : string; flag : boolean;

Function slovo(s:string; Var i : integer):string;

Const marks : set of char = [' ',',','.',':','!','?',';'];

Var temp : string;

Begin

While (i<=Length( s))and(s[i] in marks ) do inc(i);

temp:=' ';

While (i<=Length( s ))and not (s[i] in marks) do

Begin

temp:=temp+s[i];

inc(i);

end;

slovo:=temp;

end;
Begin

Write( 'Уведіть рядок:' );

ReadLn( s );

flag:=true;

i:=1;

While i<=Length( s ) do

Begin

temp:=slovo(s,i);

if (temp[i] in vowel)

then begin

flag:=false;

WriteLn( temp );end;

end;

if flag then WriteLn( 'Слів із заданою властивістю не має' );

ReadLn;

end.

№ п/п

Вхідні дані

Результати

Кількість балів



Оля

Оля

2



Гра

Слів із заданою властивістю не має

4



Оля йде до школи

Оля

6



Мама мила раму

Слів із заданою властивістю не має

8



Програма, яку склали самі учні.

яку учні

10




  1. ^ Квадратне рівняння (20 балів)

Умова:

Скласти програму для контролю знань з математики: запропонувати розв’язати 12 зведених квадратних рівнянь, коренями яких є цілі числа із проміжку [1;30] і поставити оцінку таким чином: за 12 правильних відповідей – 12 балів, за 11 правильних відповідей – 11 балів, … , за 1 правильну відповідь – 1 бал, за 0 правильних відповідей – «Залік не складено. Спробуйте ще».

Технічні вимоги:

1. На екран виводиться зведене квадратне рівняння, яке пропонується розв’язати. Учень вводить свої варіанти розв’язків. Якщо розв’язки не правильні, то на екран виводиться правильна відповідь.

2. В кінці виводиться бал за залік, або повідомлення, що залік не складено.

Рекомендації:

Для того, щоб рівняння не повторювались, будемо випадковим чином вибирати їх із проміжку [1;30], та скориставшись теоремою Вієта, утворимо коефіцієнти рівняння p та q.

Розв’язок:

Program kvadr_rivnjannja;

Var

x1,x2,p,q,a,b,i,s : integer;

Begin

s:=0;

For i:=1 to 12 do

Begin

WriteLn( 'Приклад №',i );

x1:=1+trunc(random(30));

x2:=1+trunc(random(30));

p:=-(x1+x2);

q:=x1*x2;

WriteLn( 'Введіть корені квадратного рівняння x*x', p,'x+',q,'=0');

ReadLn( a,b );

If ((a=x1) and (b=x2)) or ((a=x2) and (b=x1)) then

s:=s+1

else

WriteLn( 'Помилка. Правильна відповідь ',x1,' ',x2 );

end;

WriteLn( 'З 12 прикладів правильно розв"язані',s );

If s=0 then

WriteLn( 'Залік не складено. Спробуйте ще' )

else

WriteLn( 'Ви одержали ',s,' балів' );

ReadLn;

end.

Тести:

Програму протестувати самостійно

  1. ^ Гороскоп (20 балів)

Умова:

Написати програму, яка б визначала назву року за східним гороскопом, якщо 1624 – це рік зеленого пацюка. (Роки змінюються: 'пацюк', 'бик', 'тигр', 'заєць', 'дракон', 'змія', 'кінь', 'вівця', 'мавпа', 'півень', 'собака', 'кабан'. Кольори змінюються: 'зелений', 'червоний', 'жовтий', 'синій', 'чорний')

Технічні вимоги:

1. Рік вводиться з клавіатури.

2. Відповідь – назва та колір року за східним гороскопом

Рекомендації:

Для розв’язування задачі доцільно описати розділ констант, де перерахувати назви років (12) та кольори (5). Далі задача зводиться до обчислення остачі від ділення на 12 чи 5 та знаходження відповідного елемента в таблиці.

Розв’язок:

program rik;

type

st=string[20];

name=array[1..12] of st;

color=array[1..5] of st;

const

a:name=('пацюк', 'бик', 'тигр','заєць', 'дракон', 'змія', 'кінь', 'вівця', 'мавпа', 'півень', 'собака', 'кабан');

b:color=('зелений', 'червоний', 'жовтий','синій', 'чорний');

var x,y,z:integer;

begin

writeln('Введіть рік');

readln(x);

z:=((x-1624) mod 12)+1;

y:=((x-1624) mod 5)+1;

writeln(x, ' рік: ',a[z], ' ',b[y]);

readln;

end.

Тести:

№ п/п

Вхідні дані

Результати

Кількість балів



2010

Рік: тигр червоний

4



1951

Рік: заєць жовтий

4



1941

Рік: змія жовта

4



2345

Рік: бик червоний

4



5078

Рік: собака чорна

4




  1. Прості числа

Умова:

Знайти всі прості числа на проміжку [2..n].

Технічні вимоги:

1. Відповідь вивести у вигляді рядка простих чисел.

Рекомендації:

Задачу будемо розв’язувати за допомогою множин методом «Решета Ератосфена». Візьмемо числову множину Prime_number , у яку спочатку занесемо всі числа від 2 до 255. А потім відшукуючи перше ліворуч не викреслене число, будемо вилучати (віднімати) з множини числа, кратні цьому числу. Далі простим буде наступне не викреслене число, тобто те, що міститься першим у множині праворуч від уже знайденого. Процес повторюватимемо, доки не перевіримо всі числа у множині.

Розв’язок:

Program prosti_chusla;

Var

i, divisor : word; Prime_number : set of byte;

Begin

Prime_number:=[2..255];

i:=1;

While i<=sqrt(255) do

Begin

inc(i);

While not(i in Prime_number) do inc(i);

divisor:=2*i;

While (divisor<=255) do

Begin

Prime_number:=Prime_number-[divisor];

divisor:=divisor+i;

end;

end;

For i:=2 to 255 do

If i in Prime_number then Write( i:5 );

ReadLn;

end.

Тести:

№ п/п

Вхідні дані

Результати

Кіль-кість балів

1.

10




3

2.

40




5

3.

100



7

4.

125



8

5.

255



12




  1. Ребус (30 балів)

Умова:

Знайти всі розв’язки ребуса: МУХА+МУХА=СЛОН.

Технічні вимоги:

1. Відповідь вивести у вигляді відповідного числового виразу.

Рекомендації:

Дана задача розв’язується методом множин. Також використаємо наступні підпрограми:

Create_number – процедура, яка створює множину цифр числа. Число подається в процедуру як параметр.

Power – процедура, яка підраховує кількість елементів, що містить множина (тобто потужність множини).

Використовуючи ці процедури будемо перебирати всі можливі значення чотирицифрових чисел та перевіряти їх на відповідність умові. Очевидно, що шукані числа міститимуться в діапазоні від 1023 до 4987. Це найменше та найбільше чотирицифрові числа, цифри яких не повторюються і при збільшенні у 2 рази результатом буде теж чотиризначне число.

Для кожного з чисел і їх подвоєння створюється множина цифр, а перевірка відповідності чисел умові означає, що потужність обох множин повинна бути рівною 4, а їх перетин – порожньою множиною.

Розв’язок:

Program rebus;

Type

set_cifra = set of byte;

Var M1,M2 : set_cifra;

i : longint;

Procedure Create_number(a:longint; Var M :set_cifra);

Begin

M:=[];

While a>0 do

Begin

M:=M+[a mod 10];

a:=a div 10;

end;

end;

Function Power (M : set_cifra) : byte ;

Var p,i : byte;

Begin

p:=0;

For i:=0 to 9 do

If i in M then inc(p);

Power:=p;

end;

Begin

For i:=1023 to 4987 do

Begin

Create_number(i,M1);

If power(M1)=4 then

Begin

Create_number(2*i,M2);

If (Power(M2)=4) and (M1*M2=[])

then WriteLn( i,'+',i,'=',2*i );

end;

end;

ReadLn;

end.

Тести:

№ п/п

Вхідні дані

Результати

Кількість балів






Наявність результату можливих розв’язків на екрані

30




  1. ^ Коло (25 балів)

Умова:

Дано коло радіуса r з центром у точці з координатами x,y і пряма, задана координатами двох точок. Обчислити довжину відрізка, що знаходиться в середині кола.

Технічні вимоги:

1. З клавіатури через прогалину вводяться 7 чисел: радіус кола, координати x,y центра кола, координати x1,y1 I x2,y2 двох точок прямої. Всі числа цілі, абсолютне значення яких не перевищує 10000.

2. Результат вивести на екран без округлення. Також передбачити випадки, коли пряма і коло не перетинаються та коли дотикаються.

Рекомендації:

Для того щоб задача розв’язувалася легше, перемістимо початок координат у центр кола. Це можна зробити змістивши площину на вектор (-x,-y), де x і y – координати центра кола.

Щоб знайти відстань від центра кола до прямої, скористуємося формулою для знаходження площі трикутника: , де a дорівнює довжині відрізка прямої, що знаходиться в середині кола. З формули слідує, що , де  модуль псевдоскалярного добутку векторів =(a;b)(c;d)=ad-bc.

Якщо h>r, то перетин не існує

h=r – пряма і коло дотикаються

hl2=2(r2-h2) (за теоремою Піфагора).

Оскільки дійсні числа на точність перевірити складно, то умовою дотику вважатимемо abs(h-r)≤0.00001.

Розв’язок:

Program Kolo;

Var

r,o1,o2,x1,y1,x2,y2,d,ps,l : real;

Begin

WriteLn( 'Введіть радіус кола, координати центра, координати 2 точок прямої' );

ReadLn( r,o1,o2,x1,y1,x2,y2 );

x1:=x1-o1;

x2:=x2-o1;

y1:=y1-o2;

y2:=y2-o2;

l:=sqrt((x1-x2)*(x1-x2)+(y1-y2)*(y1-y2));

ps:=abs(x1*y2-x2*y1);

If ps=0 then

d:=0

else

d:=ps/l;

If d>r+0.00001 then

WriteLn( 'Коло і пряма не перетинаються' )

else

If abs(d-r)<0.00001 then

WriteLn( 'Коло і пряма дотикаються' )

else

WriteLn( (2*sqrt(r*r-d*d)):6:2);

ReadLn;

end.

Тести:

№ п/п

Вхідні дані

Результати

Кількість балів

1.

5 0 0 1 1 2 2

10.00

2

2.

0 0 0 0 0 0 0

Коло і пряма дотикаються

3

3.

1 0 0 0 10 10 0

Коло і пряма не перетинаються

4

4.

1 2 3 4 5 6 7

2.00

6

5.

100 100 100 100 100 100 100

200.00

10




  1. Гра «мінер»

Умова:

На прямокутному полі розміром 2хN у нижньому рядку розміщена деяка кількість мін, які гравець не бачить. А у верхньому рядку у кожній клітинці записані числа 0, 1, 2 та 3, які збігаються з кількістю мін у полях нижнього рядка, які суміжні з даною клітинкою.

^ Написати програму, яка б могла розмінувати поле, тобто позначити міну цифрою 1, а її відсутність цифрою 0.

Технічні вимоги:

1. Дані вводяться з клавіатури: спочатку число N (довжина поля), а потім N чисел від 0 до 3.

2. Відповідь подати у вигляді рядків чисел 0 та 1 (0 – нема міни,

1 – є міна)

Рекомендації:

Будемо розглядати 2 випадки.

1. Нехай у верхній нижній клітинці є міна, тоді, використовуючи задане значення у лівій верхній клітинці, можна дізнатися, чи є міна у другій ліворуч нижній клітинці. Після цього використаємо значення в другій верхній клітинці і перевіримо наявність міни в третій нижній клітинці. Ці дії будемо повторювати доти, доки знайдені значення задовольняють усі рівності або отримаємо неприпустиме значення.

Якщо, перевіривши весь масив, не отримаємо жодної невідповідності, виведемо розстановку мін на екран. У противному випадку такої розстановки не існує.

2. Нехай у крайній лівій клітинці міни немає. Перевіряючи аналогічно, або знайдемо потрібну розстановку мін або такої розстановки не існує.

Розв’язок:

Program miner;

Type

arr = array [ 1..2,0..101 ] of integer;

Var

i,k : integer;

c:arr;

f,f1:boolean;

Function Check (Var a : arr; n : integer): boolean;

Var

i : integer;

Begin

Check:=true;

For i:=2 to n do

Begin

If a[1,i-1]=0 then

a[2,i]:=0;

If (a[1,i-1]=1) and (a[2,i-1]+a[2,i-2]=0) then

a[2,i]:=1;

If (a[1,i-1]=1) and (a[2,i-1]+a[2,i-2]=1) then

a[2,i]:=0;

If (a[1,i-1]=2) and (a[2,i-1]+a[2,i-2]=1) then

a[2,i]:=1;

If (a[1,i-1]=2) and (a[2,i-1]+a[2,i-2]=2) then

a[2,i]:=0;

If a[1,i-1]=3 then

a[2,i]:=1;

If a[1,i-1]<>a[2,i-2]+a[2,i-1]+a[2,i] then

Begin

Check:=false;

break;

end;

end;

end;

Begin

WriteLn( 'Введіть довжину поля' );

ReadLn( k );

WriteLn( 'Вводьте дані через прогалину' );

For i:=1 to k do Read( c[1,i] );

c[2,0]:=0; c[2,1]:=1; c[2,k+1]:=0;

f:=Check(c,k);

If f then

Begin

For i:=1 to k do Write( c[2,i] );

halt;

end;

c[2,0]:=0; c[2,1]:=0; c[2,n+1]:=0;

f1:=Check(c,k);

If f1 then

For i:=1 to k do Write( c[2,i] );

If not (f or f1) then

WriteLn( 'Такої розстановки не існує' );

ReadLn;

end.

Тести:

№ п/п

Вхідні дані

Результати

Кількість балів

1.

2

1 1

10

01

4

2.

5

2 2 2 2 2

11011

6

3.

5

1 2 3 2 1

0110

7

4.

10

2 2 2 2 2 2 1 1 0 0

1101101000

8

5.

5

3 2 1 2 1

Такої розстановки не існує

10

Схожі:

До І етапу Всеукраїнської олімпіади iconЗавдання II етапу Всеукраїнської учнівської олімпіади з хімії
Примітка : Журі II етапу олімпіади розробляє критерії оцінювання запропонованих завдань І відповідно до них визначає рівень навчальних...
До І етапу Всеукраїнської олімпіади iconМетодичні рекомендації щодо проведення І-ІІІ етапів Всеукраїнської...
Всеукраїнської предметної олімпіади з педагогіки І психології: І етапу – у жовтні, ІІ етапу – в листопаді-грудні 2011 року, ІІІ етапу...
До І етапу Всеукраїнської олімпіади iconМетодичні рекомендації щодо підготовки до ІІІ етапу XXIX всеукраїнської...
Етап Всеукраїнської олімпіади з трудового навчання (технологій) складатиметься з 2-х турів: творчого (теоретичного), практичного...
До І етапу Всеукраїнської олімпіади iconМетодичні рекомендації щодо підготовки до ІІ етапу Всеукраїнської олімпіади з трудового навчання
Заключний етап Всеукраїнської олімпіади з трудового навчання (технологій) складатиметься з 3-х турів: комплексної роботи, захисту...
До І етапу Всеукраїнської олімпіади iconРекомендації щодо проведення ІІ (міського, районного) етапу Всеукраїнської...
...
До І етапу Всеукраїнської олімпіади iconПроведення ІІ етапу Всеукраїнської олімпіади з екології
Була створена експертна група серед вчителів району по перевірці робіт олімпіади, яка здійснила обробку робіт учасників олімпіади...
До І етапу Всеукраїнської олімпіади iconПро проведення III етапу Всеукраїнської учнівської олімпіади з історії...
Про проведення III етапу Всеукраїнської учнівської олімпіади з історії у 2012/2013 н р
До І етапу Всеукраїнської олімпіади iconІі (міського) етапу Всеукраїнської учнівської олімпіади

До І етапу Всеукраїнської олімпіади iconМетодичні рекомендації щодо проведення IІ етапу Всеукраїнської учнівської...
Дніпропетровський обласний інститут післядипломної педагогічної освіти надсилає для практичного використання методичні рекомендації...
До І етапу Всеукраїнської олімпіади iconПротокол проведення II етапу Всеукраїнської олімпіади з історії

Додайте кнопку на своєму сайті:
Школьные материалы


База даних захищена авторським правом © 2014
звернутися до адміністрації
uchni.com.ua
Головна сторінка