Програмування

ІІІ етап олімпіади з інформатики 2018-2019
Розбір задач
Від класичної геометрії до задач з програмування
Одним із самих складних завдань учителя є навчити учня програмувати. І доки існує олімпіада з програмування, то це завдання стає одним із найпріоритетніших. Зазвичай  при цьому виникають складності не лише в учня, а і в учителя. Тому на цій сторінці блогу я вирішила підібрати завдання, на яких учень буде вчитися програмувати самостійно. Але ази йому все ж таки повинен закласти учитель.  Завдання взяті з ресурсу e-olymp.com/uk. Програми записані мовою PASCAL та можуть бути використані для підготовки учнів до олімпіади з програмування. Біля умови у дужках записано відсоток зарахованих тестів по задачі. У деяких задачах розв'язок не зовсім правильний, оскільки не пройшов усі тести. Пропоную не лише учням, а і вчителям потренуватися,  знайти помилку та  у коментарях написати такий розв'язок, який буде зараховано на 100%
Алгоритми пошуку елементів у програмах
Завдання 1. Проста задача (100%)
Програма зчитує двоцифрове число і виводить через пропуск кожну цифру окремо.
Вхідні дані: Натуральне число на проміжку від 10 до 99 включно
Вихідні дані: Спочатку перша цифра і через пропуск друга.
Наприклад:           вхідні дані   23;   вихідні дані  2 3
Розв'язання
Пояснення: a - дане двоцифрове число
var a:integer;
begin read (a);
write(a div 10,' ',a mod 10);
end.
Завдання 2. Цифри (100%)
Підрахувати кількість цифр цілого невід'ємного числа n.
Вхідні дані: одне ціле невід'ємне число n (0<=n<=2*10^9)
Вихідні дані: кількість цифр у числі n.
Напрклад:             вхідні дані      12334,         вихідні дані 5
Розв'язання
Пояснення: n - дане число, s - кількість цифр

var n:int64; s:integer;
begin
read(n); s:=0; if n>0 then begin
while n>0 do begin
n:=n div 10; s:=s+1;end; write(s);end else
write('1');end.
Завдання 3. Степінь симетрії ( 100%)
Степенем симетрії натурального числа називають кількість пар його десяткових цифр, у яких цифри співпадають і розташовані симетрично відносно середини десяткового запису цього числа.Якщо деяка цифра стоїть посередині десяткового запису, її теж треба враховувати у парі з нею самою.Знайти степінь симетрії числа n.
Вхідні дані: єдине натуральне число  n.
Вихідні дані: єдине число - степінь симетрії числа n.
Наприклад:   вхідні дані          123421,           вихідні дані             2
Розв'язання.
Пояснення: n - дане число; s - кількість цифр у числі; c[s] -кожна цифра числа, розміщена у масиві; k - степінь симетрії. Оскільки кожну однакову цифру степені симетрії програма рахує двічі, то результат у випадку парної кількості цифр числа ділимо на 2, а у випадку непарної кількості цифр до результату ще додаємо 1, бо цифру посередині також необхідно врахувати.
var n,i,j,s,k:longint; c:array[1..10] of byte;
begin
read(n);  s:=0; k:=0;
while n>0 do begin s:=s+1;
c[s]:=n mod 10; n:=n div 10; end;
 j:=1; i:=s;
while s>0 do begin
if c[s]=c[j] then k:=k+1; s:=s-1; j:=J+1;
end; k:=k div 2;
if (i mod 2 = 0) then   write(k) else write(k+1); end.
Завдання 4. Кількість іграшок ( 100%)
Задано кількість видів іграшок в магазині: кількість іграшок кожного виду та вартість іграшки кожного виду. Визначити кількість іграшок, вартість яких менша за 50 грн
Вхідні дані:  у першому рядку задано кількість видів іграшок n (0<=n<=100). У наступних n рядках задано по два числа через пропуск: спочатку а (0<=a<=1000), та їх ціна в грн b (0<b<=1000)
Вихідні дані: кількість іграшок, ціна яких менша за 50 грн.
Наприклад.   Вхідні дані  3                  вихідні дані  15
                                2  100.00
                                5  23.00
                               10   22.50
Розв'язання
s - кількість іграшок, n - кількість видів іграшок, c[i]-кількість іграшок певного виду,  b[i] - ціна іграшки певного виду.
var n,s:int64;i,j:integer;c:array[1..1000] of int64;
b:array[1..10000] of real;
begin
read(n);s:=0;
for i:=1 to n do
begin
read (c[i],b[i]);
end;
for i:=1 to n do begin
if  b[i]<50 then s:=s+c[i];
end;
writeln(s);
end.
Завдання 5. Олімпіада (100%)
Олімпіада почалася в h1год m1 хв s1сек та закінчилася о  h2 год m2 хв s2 сек. Скільки часу (год хв сек) тривала олімпіада.
Вхідні дані: у першому рядку записано час початку, а в другому - час закінчення олімпіади у форматі год хв сек. (0<=h1<=h2<=23, 0<=m1,m2<=59, 0<=s1,s2<=59)
Вихідні дані: у єдиний рядок вивести час, що тривала олімпіада у форматі год хв сек
Наприклад.   Вхідні дані 9   30   0        вихідні дані  3  15  30
                                         12  45  30
Розв'язання
var a,b,c,d,e,f,g,t,x,z,y:int64;
begin
readln(a,b,c); readln(d,e,f);
g:=a*3600+b*60+c; t:=d*3600+e*60+f;
y:=t-g; x:=y div 3600; y:=y-x*3600; z:=y div 60; y:=y-z*60;
writeln(x,' ',z,' ',y); end.
Завдання 6. Кільце (100%)

prb924

Задано площу кільця і радіус зовнішнього кола. Визначити радіус внутрішнього кола.

Вхідні дані: в єдиному рядку задано два дійсних числа, спочатку площу кільця, і через пропуск радіус зовнішнього кола. Радіус кола не перевищує 100.

Вихідні дані: у єдиний рядок вивести радіус внутрішнього кола з точністю 2 знаки після десяткової крапки.

Наприклад.   Вхідні дані 50.2655  5        вихідні дані  3.00

Розв'язання
var s1,r1,r2,s2,s:real;
begin
read(s,r1);
s1:=pi*sqr(r1);
s2:=s1-s;
r2:=sqrt(s2/pi);
writeln(r2:4:2);
end.
Завдання 7. Рівень навчальних досягнень(100%)
Встановити рівень навчальних досягнень учня (початковий, середній, достатній, високий) відповідно до заданої оцінки (від 1 до 12).
Вхідні дані: одне число - бал учня
Вихідні дані: вивести Intial для початкового рівня, Average для середнього рівня, Sufficient для достатнього рівня, High для високого рівня.
Наприклад.   Вхідні дані 12       вихідні дані  High 
Розв'язання
var n:integer;
begin
read(n);
if(n>0) and (n<=3) then writeln('Initial');
if(n>3) and (n<=6) then writeln('Average');
if(n>6) and (n<=9) then writeln('Sufficient');
if(n>9) and (n<=12) then writeln('High');
end.
Завдання 8. Прямокутний чи ні? (100%)
Задано довжини сторін трикутника. Визначити, чи є цей трикутник прямокутним?
Вхідні дані:у єдиному рядку дано три натуральні числа - сторони трикутника. Довжини сторін не перевищують 1000.
Вихідні дані: вивести YES без лапок, якщо трикутник прямокутний і  NO якщо не прямокутний
Наприклад.   Вхідні дані 3  5  4       вихідні дані  YES
Розв'язання
var a,b,c:real;
begin
read(a,b,c);
if (sqr(a)=(sqr(b)+sqr(c))) or (sqr(b)=sqr(a)+sqr(c)) or
(sqr(c)=sqr(a)+sqr(b)) then writeln('YES') else writeln('NO');end.
Завдання 9. Яка чверть? (100%)
Задано точку з координатами х  і у. Визначити в якій координатній чверті вона розміщена.
Вхідні дані: у єдиному рядку дано два дійсних числа записані через пропуск - координати точки, значення яких по модулю не перевищують 100. 
Вихідні дані: єдине число - номер відповідної чверті, або 0, якщо однозначно визначити чверть неможливо.
Наприклад.   Вхідні дані 12  31       вихідні дані  1
Розв'язання
var x,y:real;
begin  read(x,y);
if (x>0) and (y>0) then writeln('1');
if (x>0) and (y<0) then writeln('4');
if (x<0) and(y>0) then writeln('2');
if(x<0) and (y<0) then writeln('3');
if (x=0) or (y=0) then writeln('0'); end.
Завдання 10. Пора року (100%)
Визначити назву пори року за заданим номером місяця, використовуючи складені умови.
Вхідні дані: одне число - номер місяця. 
Вихідні дані: для весняних місяців вивести Spring, для літніх - Summer, для осінніх - Autumn, для зимових - Winter
Наприклад.   Вхідні дані 12  31       вихідні дані  1
Розв'язання
var n:integer;
begin  read(n);
if (n=12) or (n<=2) then writeln('Winter');
if (n>2) and (n<=5) then writeln('Spring');
if (n>5) and (n<=8) then writeln('Summer');
if (n>8) and (n<=11) then writeln('Autumn');
end.
Завдання 11. Паралелограм (100%)
Задано 4 числа a, b, c, d? шо визначають довжини відрізків. Визначити, чи можна з цих відрізків утворити паралелограм.
Вхідні дані: у єдиному рядку дано 4 числа через пропуск.одне число - номер місяця. 
Вихідні дані: у єдиному рядку вивести YES, якщо паралелограм існує і NO (без лапок) якщо не існує. 
Наприклад.   Вхідні дані 2 4 2 4        вихідні дані  YES
                       Вхідні дані 2 4 2.5 4        вихідні дані  NO
Розв'язання
var a,b,c,d:real;
begin   read(a,b,c,d);
if ((a=c) and (b=d)) or ((a=b) and (c=d)) or ((a=d) and (b=c))
 then writeln('YES') else writeln('NO'); end.
Завдання 12. Подвоєний мінімальний (100%)
Задано одномірний масив А дійсних чисел, пронумерованих від 1 до h. Обчислити подвоєне значення мінімального елемента масива.
Вхідні дані: у першому рядку задано натуральне число h - кількість елементів у масиві (h<=100). У наступному рядку через пропуск h дійсних чисел - самі елементи масиву, значення яких по модулю не перевищує 100.  
Вихідні дані: у єдиному рядку вивести відповідь до задачі, з точністю до 2-х знаків після десяткової крапки.
Наприклад.   Вхідні дані 6                                         вихідні дані  -6.00
                                        6  7.5  2.1  2.0  0  -3
Розв'язання
var n,i:integer; min: real; a:array [1..100] of real;
begin  read(n);
for i:=1 to n do
read( a[i]);  min:=(a[1]);
for i:=1 to n do begin
if (a[i])<min then min:=a[i]; end;
writeln(2*min:4:2);end.
Завдання 13. Зсунь елементи (100%)
Задано одномірний масив  цілих чисел n. Зсунути елементи масиву циклічно праворуч на 1 крок. .
Вхідні дані: у першому рядку задано кількість елементів масиву n (n<=100). У другому самі значення елементів масиву, значення яких за модулем не перевищують 100. 
Вихідні дані: у єдиному рядку вивести через пропуск n чисел нового масиву.
Наприклад.   Вхідні дані 4                                         вихідні дані  4  1  2  3
                                        1  2  3  4 
Розв'язання
var n,r,p,i:integer;a:array [0..100] of integer;
begin  read(n);
for i:=1 to n do begin
read( a[i]); end;  r:=a[n];
for i:=n downto 2 do
a[i]:=a[i-1];a[1]:=r;
for i:=1 to n do
if i<>n then write(a[i],' ') else writeln(a[i]);   end.
Завдання 14. Сума найбільшого і найменшого (100%)
Задано одномірний масив  цілих чисел. Визначити суму найбільшого і наменшого елементів масиву.
Вхідні дані: у першому рядку задано кількість елементів масиву n (n<=100). У другому самі значення елементів масиву, значення яких за модулем не перевищують 100. 
Вихідні дані:  вивести суму найбільшого і найменшого елементів масиву.
Наприклад.   Вхідні дані 4                                         вихідні дані  5
                                        1  2  3  4 
Розв'язання
var n,i:integer; s,m:integer;p:integer; a:array [1..100] of integer;
begin read(n);
for i:=1 to n do begin read( a[i]); end;
   for i:=1 to n do  for p:=1 to n-1 do
if a[p]>a[p+1] then begin
 m:=a[p]; a[p]:=a[p+1];a[p+1]:=m;end;
 s:=a[1]+a[n];  writeln(s); end.
Завдання 15. Голосні (100%)
До голосних літер в латинському алфавіті відносять букви A E Y U I O. Інші літери вважаються приголосними. Напишіть програму яка підрахує кількість голосних букв у тексті.
Вхідні дані: у вхідному файлі міститься один рядок тексту, який складається лише із заглавних латинських літер та проміжків. Довжина рядка не перевищує 100 символів. 
Вихідні дані:  у вихідний файл вивести одне ціле число - кількість голосних літер у вхідному тексті. 
Наприклад.   Вхідні дані COBRA                                         вихідні дані  2
Розв'язання
var s,i:word;text:string ;  a:char;
begin read(text); s:=0;
for i:=1 to length(text) do
if(text[i]='A') or (text[i]='E') or (text[i]='O') or (text[i]='Y') or
(text[i]='I') or (text[i]='U') then s:=s+1; writeln(s);end.
Завдання 16. Кількість слів (100%)
Підрахувати  кількість слів у заданому фрагменті  тексту.
Вхідні дані: у єдиному рядку міститься фрагмент англійського  тексту, кількість символів у якому не перевищує 250. Гарантується, що у тексті відсутні тире, числа, дефіси, цифри. 
Вихідні дані:  єдине число - кількість слів у фрагменті
Наприклад.   Вхідні дані Hello word!                                         вихідні дані  2
Розв'язання
var s,i:word;text:string ;
begin read(text); s:=0;
for i:=1 to length(text) do
if text[i]=' ' then s:=s+1;
writeln(s+1);end.
Завдання 17. Використовуй підпрограму (100%)
Обчислити суму і добуток n пар заданих чисел, скориставшись програмою SumDob для обчислення суми і добутку двох дійсних чисел.
Вхідні дані: у першому рядку задано натуральне число п - кількість пар чисел. У наступних п рядках через пропуск задано 2 дійсних числа. всі вхідні дані по модулю  не перевищують 100.  
Вихідні дані:  у п рядках вивести через пропуск по два числа: спочатку суму потім добуток відповідної пари. Результат виводити з точністю до 4 знаків після десяткової крапки
Наприклад.   Вхідні дані 2                                      вихідні дані  
                                        6   7.5                                              13.5000  45.0000
                                        2.1  2.0                                             4.1000   4.2000
Розв'язання
procedure SumDob(a,b:real;var s,p:real);
begin   s:=a+b;  p:=a*b;  end;
 var i,n:integer; x,z,f,y:array[1..100] of real;
 begin  read(n);
  for i:=1 to n do begin
  read (x[i],y[i]); end;
  for i:=1 to n do begin
  SumDob(x[i],y[i],z[i],f[i]);
  writeln(z[i]:7:4,' ',f[i]:7:4);   end;end.
Завдання 18. Використовуй функцію (100%)
Задано 3 дійсних числа х, у і z. Обчислити min(max(x,y), max(y,z), x+y+z), скориставшись допоміжними функціями обчислення максимального та мінімального значення з двох елементів. 
Вхідні дані: у єдиному рядку задано 3 значення x, y, z, відокремлені пропуском. Значення чисел і по модулю  не перевищують 100.  
Вихідні дані:  вивести відповідь  з точністю до 2 знаків після десяткової крапки
Наприклад.   Вхідні дані 1.05  2.25  2.15                                      вихідні дані  2.25
Розв'язання
function max(a,b:real):real;
begin  if a>b then max:=a else max:=b;  end;
 function min(a,b,c:real):real;
 begin  if (a<=b) and (a<=c) then min:=a;
 if (b<=a) and (b<=c) then min:=b;
 if (c<=a) and (c<=b) then min:=c;  end;
  var x,y,z:real;m1,m2,m3,m:real;
 begin  read(x,y,z);
 m1:=max(x,y); m2:=max(y,z);m3:=x+y+z; m:=min(m1,m2,m3);
 writeln (m:4:2);    end.
Завдання 19. Формула Герона (100%)
prb926
Задано a, b, c, d та діагональ f опуклого чотирикутника. Обчислити площу чотирикутника, використовуючи допоміжну функцію обчислення площі трикутника за формулою Герона.
Вхідні дані: у єдиному рядку задано 5 значеннь a, b, c, d, f відокремлені пропуском. (0<a,b,c,d,f<=100), як це показано на рисунку..  
Вихідні дані:  вивести площу з точністю до 4 знаків після десяткової крапки
Наприклад.   Вхідні дані 3 4 4 2 5        вихідні дані  9.7997  Розв'язання
 procedure ploscha(q,w,e:real;var s:real);
 var p:real;
begin   p:=(q+w+e)/2;   s:=sqrt(p*(p-q)*(p-w)*(p-e));      end;
    var a,b,c,d,f,s1,s2,s3:real;
    begin read(a,b,c,d,f);
ploscha(a,b,f,s1); ploscha(c,d,f,s2); s3:=s1+s2;
writeln(s3:7:4); end.
Завдання 20. Добуток цифр (100%)
Дано трицифрове число. Знайти добуток його цифр.
Вхідні дані: у єдиному рядку задано трицифрове число.  
Вихідні дані: вивести добуток його цифр
Наприклад.   Вхідні дані 235                                    вихідні дані   30                                     
Розв'язання
var a,b,c,f,d:integer;
begin read(a); b:=a div 100; a:=a-b*100; c:=a div 10; d:=a-c*10;
f:=b*c*d; writeln(f); end.
Завдання 21. Який трикутник? (100%)
Визначити тип трикутника (рівносторонній, рівнобедрений чи різносторонній) за заданими довжинами його сторін
Вхідні дані: у єдиному рядку задано три цілих числа, довжини яких не перевищують 100.  
Вихідні дані: вивести 1, якщо трикутник рівносторонній, 2 - рівнобедрений, 3 - різносторонній.
Наприклад.   Вхідні дані 3  4  3                                     вихідні дані   2
Розв'язання
var a,b,c:real;
begin read(a,b,c);
if (a=b) and (b=c) then begin writeln('1')  ; end
else
if (a<>b) and (a<>c) and (b<>c) then begin writeln('3'); end
else writeln('2'); end.
prb157newЗавдання 22. Зоопарк? (100%)
В зоопаркі n кліток вишукувані в ряд. Дві мавпочки зочуть знати скільки всього існує способів розселити їх так, щоб клітки були різними і не були сусідніми. Можна вважати, що всі т кліток доступні, інші мешканці зоопарку готові переїхати куди завгодно.  
Вхідні дані: у єдиному рядку задано число п (2<=n<=100) - кількість кліток в зоопарку.
Вихідні дані: вивести одне число - кількість способів розселення мавпочок.
Наприклад.   Вхідні дані 3                                     вихідні дані   2
                      Вхідні дані 4                                     вихідні дані    6
Розв'язання
var a:int64;
begin
read(a);
writeln((a-1)*(a-2));
end.
Завдання 23. Білі кубики (100%)
Професор Самодєлкін задумав виготовити кубики з брусків білого кольору.  Довжина кожного ребра дорівнює  1 дм.  Після виготовлення кубиків професор вирішив зробити всі кубики також білого кольору. Скільки кубиків із стороною 1 дм зможе виготовити  з одного бруска  професор, та скільки сторін прийдеться йому пофарбувати, якщо відомо, що довжини сторін брусків - цілі числа і задані також в дециметрах.  
Вхідні дані: Один рядок містить три цілих числа - розміри бруска в дм, які  не перевищують 1000000
Вихідні дані: В єдиному рядкузаписати через пропуск два цілих числа: кількість отриманих кубиків та кількість граней кубиків, які необхідно пофарбувати. 
Наприклад.   Вхідні дані 1  2  3                                    вихідні дані   6   14                                     
Розв'язання
var a,b,c,s1,v,s:int64;
begin
read(a,b,c); v:=a*b*c;
s1:=(a*b+b*c+a*c)*2;
writeln(v,' ',6*v-s1);end.
Завдання 24. Квадрат і точки (100%)
Яку найбільшу кількість точок з цілочисленими координатами можна накрити квадратом зі стороною п клітинок?
Вхідні дані: єдине число - сторона квадрата  (1<=n<=10000) - кількість кліток в зоопарку.
Вихідні дані: максимальна кількість накритих клітин.
Наприклад.   Вхідні дані 1                                     вихідні дані   4
Розв'язання
var b,a,n:int64;
begin    read(b);a:=b; n:=0;
while a>0 do begin
n:=n+4*a; a:=a-2; end;
if b mod 2 =1 then writeln(n) else writeln(n+1);  end.
Завдання 25. Сир для Анфіси 2 (100%)
Розрізаючи сир у господаря залишилися куски сиру у вигляді прямокутного паралелепіпеда з різними цілими довжинами сторін. Готуючи нгову страву з сиру для Анфіси господарю прийшлося розрізати дані куски сиру на кубики зі стороною 1. Яку найменшу кількість розрізів приходилося йому робити, щоб розрізати дані куски сиру, якщо він кожного разц розрізав один кусок на дві частини?
Вхідні дані: у єдиному рядку записано три числа a,b,c - довжини ребер куска (1<=a,b,c<=2000000000) 
Вихідні дані: єдине число - кількість розрізів.
Наприклад.   Вхідні дані 2  3  4                                     вихідні дані   23
Розв'язання
var a,b,c:int64;
begin  read(a,b,c);
writeln(a*b*c-1); end.
Завдання 26. Анфіса і квіти (100%)
prb63Мурзик одну з квіткових клумб зробив у вигляді шахової дошки розмірами т на п, у кожній клітинці якої росте якась квітка. Інколи на цю клумбу він виводить на прогулянку Анфісу (так, не дивуйтесь, вони дійсно друзі). Анфіса, починаючи завжди з верхнього лівого кута переміщується по клумбі до правого нижнього і збирає квіти, причому таким чином, щоб щоразу проходити по новому маршруту, а Мурзик на вихлді вручає їй щматочок сиру.  Порахувати, яка найбільша кількість шматочків смру дістанеться Анфісі, якщо вона весь час намагається зберегти якнайбільше квітів. При кожному своєму переміщенні Анфіса обов'язково має зібрати як мінімум одну квітку.
Вхідні дані:  у єдиному рядку через пропуск два  числа т і п (0<m,n<=2000000000) 
Вихідні дані: єдине число - найбільша кількість шматочків сиру, які може отримати Анфіса.
Наприклад.   Вхідні дані 2  3                                       вихідні дані   3
Розв'язання
var a,b:int64;
begin  read(a,b);
writeln((a-1)*(b-1)+1);
end.
Завдання 27. Метелик-санітар (100%)
prb57Учні, йдучи з дому до школи або навпаки - зі школи додому, полюбляють їсти цукерки. Але як завжди, ця приємна справа інколи має неприємні наслідки - дітки інколи викидають обгортки на шкільному подвір'ї. Мурзик завжди слідкував за чистотою шкільного двору і йому чудово у цьому допомагали метелики, вдячні за чудові фотографії, зроблені ним. Метелики могли використовувати власні крильця як лінзи, причому вони могли змінювати їх фокусну відстань. Помітивши обгортку від цукерок, що лежала на подвір'ї у точці з координатами ч1,н1 метелик перелітав у точку х2,  у2, z2, розташовану на шляху сонячного проміння до обгортки і змінюючи фокусну відстань своїх крилець-лінз спалював обгортку від цукерки. 
яку оптичну силу D мали крильця-лінзи метелика?
Вхідні дані: у першому рядку два числа - координати х1, у1 обгортки від цукерки. У другому - 3 числа x2, y2, z2 - координати метелика у момент спалювання обгортки. Усі числа цілі і не перевищують за модулем 1000
Вихідні дані: єдине число - оптична сила крилець-лінз D, обчислена з точністю до 3 знаків після коми, за правилами математичних округлень.
Наприклад.   Вхідні дані 10  20                                    вихідні дані   0.010
                                          10  20  100
Розв'язання
var a,b,c,d,e,n:real;
begin  read(a,b,c,d,e);
n:=1/sqrt(sqr(e)+sqr(d-b)+sqr(a-c));
writeln(n:5:3);  end.
Завдання 28. Перетин двох відрізків (94%)
Вияснити чи перетинаються два відрізки
Вхідні дані: вісім цілих чисел, які за модулем не перевищують 10000 - координати кінців двох відрізків
Вихідні дані: один рядок YES, якщо перетинаються і  - NO  якщо не перетинаються
Наприклад.   Вхідні дані 5 1 2 6 1 1 7 8                                 вихідні дані   YES
Розв'язання
var x1,x2,x3,x4,y1,y2,y3,y4,v1,v2,v3,v4 : longint;
begin    read(x1,y1,x2,y2,x3,y3,x4,y4);
  v1:=(x4-x3)*(y1-y3)-(y4-y3)*(x1-x3);   v2:=(x4-x3)*(y2-y3)-(y4-y3)*(x2-x3);
  v3:=(x2-x1)*(y3-y1)-(y2-y1)*(x3-x1);  v4:=(x2-x1)*(y4-y1)-(y2-y1)*(x4-x1);
  if (v1*v2<=0) and (v3*v4<=0)  then write('YES')  else write('NO'); end.
Завдання 29. Велика точність (100%)
Дано раціональний дріб т/п. Запишіть його у вигляді десяткового дробу з точністю k знаків після коми.
Вхідні дані: в одному рядку три числа т, п, k (0<m,n<=100, 0<=k<=1000)
Вихідні дані: вивести k точних значущих цифр після десяткової крапки шуканого числа.що не перетинаються
Наприклад.   Вхідні дані 1 2 3                              вихідні дані   0.500
Розв'язання

Немає коментарів:

Дописати коментар