Олимпиада по паскали
Оценка 4.6

Олимпиада по паскали

Оценка 4.6
Занимательные материалы +2
docx
информатика
9 кл—11 кл
10.02.2017
Олимпиада по паскали
Олимпиадные задач с решениями на языке программирования Паскаль Задача 1 Компьютер в первую секунду печатает на экране 1, во вторую – число 12, в третью – число 23. То есть, в каждую следующую секунду – на 11 больше, чем в предыдущую. В какую секунду впервые появится число, делящееся на 2009?
олимпиады по информатикес решениями.docx
Купенова Гегани Мгеровна  Олимпиадные задач с решениями  на языке  программирования Паскаль Задача 1  Компьютер в первую секунду печатает на экране 1, во вторую – число 12, в третью – число 23. То есть, в каждую следующую секунду – на 11 больше, чем в предыдущую. В какую секунду впервые появится число, делящееся на 2009?  Программа program z1; var k,x:integer; Begin      k:=1;      x:=1;      while x mod 2009<>0 do      begin           k:=k+1;           x:=x+11;      end;      writeln ('Через ', k, ' секунд'); end. Задача 2  Найдите количество четных цифр в десятичной записи числа n. Пример 1486 Входные данные Результат 3 371 Программа 0 program z2; var    x, y, k:integer;    Begin        readln (x);         k:=0;         while x<>0 do         begin              y:=x mod 10;              if y mod 2 =0 then k:=k+1;              x:=x div 10;         end;         writeln ('k=',k);    end. Задача 3  Выясните, лежат ли на одной прямой точки А(x1, y1), B(x2, y2), C(x3, y3) Пример Входные данные x1=1      y1=1 x2=6     y2=3 x3=11   y3=5 Программа Результат Точки лежат на одной прямой program z3; var    x1, x2, x3, y1, y2, y3, z, n:real; Begin      write (‘Введите координаты точки А ');      readln (x1,y1);      write (‘Введите координаты точки В ');      readln (x2,y2);      write (‘Введите координаты точки  C ');      readln (x3,y3);      z:=(x3­x1)/(y3­y1);      n:=(x3­x2)/(y3­y2);      if (z=n) and (z=(x2­x1)/(y2­y1)) then         writeln ('Точки лежат на одной прямой’)      else          writeln ('Точки не лежат на одной прямой’); end. Задача 4  Сообщество роботов живет по следующим законам: один раз в год они объединяются в полностью укомплектованные группы по 3 или 5 роботов (причем число групп из 3 роботов ­ максимально возможное). За год группа из 3 роботов собирает 5, а группа из 5 ­ 9 новых собратьев. Каждый робот живет 3 года после сборки. Известно начальное количество роботов (К>7), все они только что собраны. Определить, сколько роботов будет через N лет. Входные данные Результат 152 143702 Пример 8      3 10   10 Программа program z4; var k, i, n, p:integer; s, x, y:longint; r:array [1..3] of longint; Begin write('количество роботов k='); readln(k); write('количество лет n='); readln(n); r[1]:=k; r[2]:=0; r[3]:=0; s:=k; for i:=1 to n do      begin x:=s div 3; p:=s mod 3; if p=0 then y:=0 else if p=1 then begin x:=x­3; y:=2 end else begin x:=x­1; y:=1 end; r[3]:=r[2]; r[2]:=r[1]; r[1]:=5*x+9*y; s:=r[1]+r[2]+r[3];        end;         writeln (‘Количество роботов ­ ’,s); end. Задача 5 Суточный   рацион   коровы   составляет  a  кг   сена,  b    кг   силоса   и  c  кг   комбикорма.   В хозяйстве, содержащем стадо из k  голов, осталось x центнеров сена, y тонн силоса и z мешков комбикорма по 50 кг. Сколько еще дней хозяйство сможет кормить коров по полному рациону.  Программа program z5; var   a,b,c,x,y,z,kol,r:real; Begin readln (a,b,c); readln (x,y,z); readln (r);    x:=int(x*100/a);    y:=int(y*1000/b);    z:=int(z*50/c);    kol:=0;    if (x>=r) and (y>=r) and (z>=r) then    begin               end;    writeln (kol); end. Задача 6  if (x<=y) and (x<=z) then kol:=int(x/r); if (y0) and (kol<50) do    begin        kol:=kol+1;        k:=k+k*(p/100);        k:=k­r;    end;    if kol>=50 then writeln ('no') else writeln (kol); end. Задача 7 Дано  два   целых   положительных  числа:  a  и  b.  Требуется   написать  программу,   которая находит цифру, на которую оканчивается число a^b. Входные данные Результат a=2 b=4 Программа 6 program z7; var    a,b,d:integer;    c:byte; Begin    writeln ('Введите a');  readln (a);    writeln ('Введите b');  readln (b);    d:=a;    if b=1 then writeln (a)    else    begin       for c:=2 to b do         d:=d*a;         d:=d mod 10;    end;    writeln (d); end. Задача 8 Из одного порта в другой необходимо перевезти 15 различных грузов. Грузоподъемность судна, на котором будет проходить перевозка, 50 тонн. Грузы пронумерованы, и информация о массах   грузов   хранится   в   массиве   М(15).   Определить,   сколько   рейсов   необходимо   сделать судну,   если   грузы   неделимы   и   могут   перевозиться   только   подряд  в   порядке   их   нумерации. (Предполагается, что масса отдельного груза не превышает 50 тонн).  Программа program z8; type mas=array[1..15] of integer; var    m:mas;    k,i,s:integer; Begin    for i:=1 to 15 do       begin          writeln ('Введите m','[',i,']'); readln (m[i]);       end;       k:=1; i:=1; s:=0;       repeat          if s+m[i]<=50 then            begin              s:=s+m[i];              i:=i+1;            end               else                  begin                    k:=k+1;                    s:=0;                  end;        until i>15;        writeln ('Потребовалось, k,'рейсов'); Задача 9 Коммерсант, имея стартовый капитал  k  рублей, занялся торговлей, которая ежемесячно увеличивает капитал на p%. Через сколько лет он накопит сумму s, достаточную для покупки собственного магазина?  Пример Входные данные Результат 200000 5 3000000 Программа 4 program z9; var    s,k,p:real;    n:integer; Begin writeln ('Введите стартовый капитал'); readln(k); writeln ('Введите % увеличения капитала'); readln(p); writeln ('Введите сумму, необходимую для покупки магазина'); readln(s); while k 0) and (c <> 0) and (i mod (a * b * c) = 0) then writeln (i);   end; end. Задача 11 На   конференцию   приехало  N    человек.   Для   их   перевоза   выделили   автомобили вместимостью  К  и  М  человек   (без   водителя).   К   гостинице   автомобили   подаются   в   таком порядке: сначала вместимостью К человек, потом – М человек и так далее. В автомобиле можно перевозить не более максимально допустимого количества пассажиров. Определить, сколько необходимо автомобилей для перевозки всех делегатов конференции. Пример Входные данные Результат 6 20 3 4 Программа program z11; var N,M,K,x:integer; Begin writeln ('Введите количество участников'); readln(N); writeln ('Введите вместимость первого автомобиля'); readln(K); writeln ('Введите вместимость второго автомобиля'); readln(M);   x:=0;   while N>0 do   begin      x:=x+1;      if x mod 2<>0 then N:=N­K else N:=N­M;   end;   writeln (x); end. Задача 12 Имеется  четыре  коробки  спичек  и  в  каждой  из   них  по 15  спичек.  Номер  коробки,  из которой   берется   очередная   спичка,   выбирается   случайно.   Сколько   спичек   будет   сожжено, прежде чем одна из коробок опустеет? Составить программу. Программа program z12; var    A: array [1..4] of integer;    i, m ,n:integer; Begin for i:=1 to 4 do A[i]:=15; repeat n:=1+random(4); A[n]:=A[n]­1; m:=m+1; until A[n]=0; writeln ('В коробке', n, 'закончились спички'); writeln ('Израсходовано спичек', m); end. Задача 13 Сформировать квадратную матрицу следующего вида. 1 2 3 4 5 2 3 4 5 1 3 4 5 1 2 4 5 1 2 3 5 1 2 3 4 Программа program z13; var    A: array [1..5, 1..5] of byte;    i, j:integer; begin for i:=1 to 5 do for j:=1 to 5 do A[i, j]:=1+(i+j­2) mod 5; for i:=1 to 5 do begin for j:=1 to 5 do write (a[i, j]:2); writeln; end; end. Задача 14 Дано число типа byte. Проверить, является ли палиндромом его двоичное представление с учетом того, что сохранены старшие нули. Пример таких чисел: 102 (т. к. 102 = 0110 01102, а это палиндром), 129 (129 = 1000 00012) и т. д. Пример Входные данные Результат n=129 n=128 Программа true false program z14; var    n, a, b, c, d: byte; Begin    readln (n);    a := n mod 2;    n := n div 2;    b := n mod 2;    n := n div 2;    c := n mod 2;    n := n div 2;    d := n mod 2;    n := n div 2;    a := 8 * a + 4 * b + 2 * c + d;    writeln (n = a); end. Задача 15 Даны два натуральных числа. Найти их наименьшее общее кратное. Примечание:   наименьшим   общим   кратным   двух   чисел  m  и  n  называется   наименьшее натуральное число, которое делится на m и n. Обозначение: НОК(m, n) Пример Входные данные Результат 55 m=5 n=11 Программа program z15; var m, n, prod: word; Begin readln(m, n); prod := m * n; while m <> n do begin if m > n then begin m := m – n end else begin n := n – m end end; writeln(prod div m)   end. Задача 16 Дана последовательность символов длины n (n >= 1). Проверить баланс круглых скобок в этом   выражении.   Например,   при   вводе   выражения   (())()   программа   должна   сообщить   о правильности расстановки скобок, а при вводе выражения ((()) – о неправильности. Примечание: сбалансированной скобочной записью называется символьное выражение, в котором каждой открывающей скобке соответствует закрывающая скобка правее и наоборот, каждой закрывающей скобке соответствует открывающая скобка левее. Пример Входные данные Результат false n=7 (((()))               Программа program Z16;    var    count: integer;    i, n: byte;    c: char; Begin    readln(n);    count := 0;    for i := 1 to n do begin read(c);    if c = '(' then inc(count);    if c = ')' then dec(count);    if count = ­1 then break    end;    writeln(count = 0) end. Задача 17   Сколько существует упорядоченных пар натуральных чисел а и b, для которых известны их наибольший общий делитель d и их наименьшее общее кратное m?  Пример d=2 m=30 Программа Входные данные Результат (6, 10) (2, 30) program Z17; var    a, b, i, j, d, m:integer;    function nod(a, b:integer):integer;    begin    if a=b then nod:=a    else    if a>b then nod:=nod(a­b, b) else nod:=nod(a, b­a)    end; Begin    writeln (‘Введите НОД двух чисел d’);    readln (d); writeln (‘Введите НОK двух чисел m’);    readln (d);    for i:=1 to 100 do    begin    for j:=1 to 100 do    begin    a:=i;    b:=j;    if ((nod(a, b)=d) and ((a*b div nod(a, b))=m)) then writeln (i, j);    end;    end;    readln end. Задача 18 Правительство  гарантирует, что инфляция  в новом году  составит  р% в месяц. Какого роста цен за год можно ожидать? Составить программу решения задачи.  Пример p=1 p=10 Программа Входные данные Результат s=12.68 s=213.84 Пояснения:  Сложные   проценты   вычисляются   по   формуле   . program Z18; var     a, p, s:real; Begin    writeln (‘Введите процент месячной инфляции’); readln (p);    a:=exp(ln(1+p/100)*12);    s:=(a­1)*100;    writeln (s:10:2);    readln end. Задача 19 таковы:   «отличников»,   «хорошистов»,  Факультету выделен стипендиальный фонд в размере f рублей в месяц. Результаты сессии  «троечников». Повышенная стипендия   рублей;    задолжники  стипендии   рублей, обычная ­   (для  отличников) составляет   лишаются. Составить программу, определяющую сколько студентов каждой категории могут получать   стипендию   и   каков   будет   остаток   фонда   на   материальную   помощь   малоимущим студентам?  Программа program Z19; var     n1,n2,n3,k1,k2,k3,s,s1,s2:integer;     f:longint;  Begin  writeln (‘Введите размер фонда’);  readln (f);  writeln (‘Введите количество отличников, хорошистов и троечников’);  readln (n1,n2,n3);  writeln (‘Введите размер стипендий’);  readln (s1,s2);  if f>s1*n1 then k1:=n1 else k1:=f div s1;  f:=f­s1*k1;  if f>s2*n2 then k2:=n2 else k2:=f div s2;  f:=f­s2*k2;  if f>s2*n3 then k3:=n3 else k3:=f div s2;  f:=f­s2*k3;  writeln ('Количество отличников, получивших стипендию=',k1);  if k2>0 then writeln ('Количество хорошистов, получивших стипендию= ',k2);  if k3>0 then writeln ('Количество троечников, получивших стипендию =',k3);  writeln (‘Фонд материальной помощи=’, f);  readln  end. Задача 20 N  коробок стоят по кругу. В  i­ой коробке  j  змей. Каждую минуту змеи переползают в соседнюю коробку (из i­ой в i+1­ую), а из N­ой – в первую. Составить программу, определяющую количество змей в каждой коробке через  М минут.  Пример N=6 M=4 Входные данные Результат 3  4  5  6  1  2 Программа program Z20; var     n, m, i, j:integer; Begin     writeln (‘Введите количество коробок n’);     readln (n);              writeln (‘Введите количество минут m’);     readln (m);     m:=m mod n;     if m=0 then begin j:=0; m:=n end else j:=n­m;     for i:=1 to n do     begin     j:=j+1;     write (j,' ');     if i=m then j:=0;     end;     writeln (n);     readln end. Задача 21  У Вас имеется в наличии 2000 рублей. Вам необходимо купить в общей сложности 200 предметов по следующим ценам: фломастеры ­ 20 рублей за упаковку, тетради общие ­ 10 рублей за штуку, стержни ­ 1,5 рубля за штуку. Вы должны потратить все деньги.  Программа program z21; var    x,y,z,kol:integer;    sum:real; Begin for x:=1 to 200 do begin     for y:=1 to 200 do     begin         for z:=1 to 200 do         begin         sum:=20*x+10*y+1.5*z;         kol:=x+y+z; if (sum=2000) and (kol=200) then writeln('фломастеры ­',x,' тетради ­', y, ' стержни ­', z);         end;     end; end; end. Задача 22   Имеется  N  точек, расположенных в произвольном порядке на плоскости. Найти две точки, расстояние между которыми наименьшее. Входные данные Результат Номера точек 1   2 Пример n=5 3   4 7   2 9   9  ­7  ­3  ­1  ­1 Программа program z22; const n=5; var     a:array[1..n] of integer;     b:array[1..n] of integer;     i,j,num1,num2:integer;     m,q:real; begin FOR i:= 1 TO n do     begin     readln(a[i], b[i]);     end;     num1:=1;     num2:=2;     m:=SQRT(SQR(a[1] ­ a[2])+ SQR(b[1] ­ b[2]));     FOR i:= 1 TO n ­ 1 do     begin          FOR j:= i + 1 TO n  do          begin          q:=SQRT(SQR(a[1] ­ a[2])+ SQR(b[1] ­ b[2]));          IF q < m THEN          begin          m:=q; num1:=i;          num2:=j;          end;     end;     end; writeln(‘Номера точек’); writeln(num1,'   ',num2); end. Задача 23 В   книге  N  страниц.   Составить   программу   подсчета   количества   десятичных   цифр, требуемых для нумерации всех страниц книги. Нумерация проводится от 1 и далее.  Пример Входные данные Результат s=11 s=192 N=10 N=100 Программа program z23; var    n, i, s:integer;    k:string; Begin readln (n); s:=0; for i:=1 to n do begin str(i,k);    s:=s+length(k); end;          writeln ('Количество десятичных цифр=' ,s); end. Задача 24 Король   Флатландии   решил   вырубить   некоторые   деревья,   растущие   перед   его   дворцом. Деревья перед дворцом короля посажены в ряд, всего там растет  N деревьев, расстояния между соседними деревьями одинаковы.  После   вырубки   перед   дворцом   должно   остаться   M   деревьев,   и   расстояния   между соседними   деревьями   должны   быть   одинаковыми.   Помогите   королю   выяснить,   сколько существует способов вырубки деревьев. Требуется написать программу, которая по заданным числам N и M определит, сколько существует способов вырубки некоторых из N деревьев так, чтобы после вырубки осталось M деревьев и соседние деревья находились на равном расстоянии друг от друга. Пример Входные данные Результат 4 N=5 M=3 Программа program z24; var     n, m ,k: longint;     i, d, s: longint;         Begin readln(n); readln(m); s := 0; k:=(n­1) div (m­1); d:=m­1; s:=(2+(k­1)*d)*k div 2; writeln (‘Количество способов вырубки деревьев=’, s); end. Задача 25  Из элементов массива А(2n) получить массивы В(n) и C(n) следующим образом. Выбрать в массиве А два наиболее близких по значению элемента; меньший из них поместить в массив В, а больший – в массив С. Продолжить выбор из оставшихся элементов до полного заполнения массивов В и С. Пример Входные данные Массив А 8  0  10  4  1  99  3  15  2  11               Программа Результат 0  2  4  10  15 Массив В 0 Массив С 1  3  8  11  99 program z25; var    i, j, x,k,n:integer;    min,d:real;    a:array[1..10] of real;    b:array[1..5] of real;    c:array[1..5] of real; Begin x:=0; k:=0; for i:=1 to 10 do     read(a[i]);     writeln('Массив А');     for i:=1 to 10 do     write(a[i], '  ');     writeln; for i:=1 to 10 do     begin     min:=a[i];          for j:=i+1 to 10 do          begin               if a[j]0 then                  begin                  x:=x+1;                  b[x]:=min;                  end               else                   begin                   k:=k+1;                   c[k]:=min;                   end;     d:=a[n];     a[n]:=a[i];     a[i]:=d;     end; writeln('Массив B');     for i:=1 to 5 do     begin     write(b[i], '  ');     end;     writeln;     writeln('Массив C');     for i:=1 to 5 do     begin     write(c[i], '  ');     end; end. Задача 26  Дан прямоугольник, длины сторон которого равны натуральным числам А и В.  Составить программу,   которая   будет   находить   на   сколько   квадратов   можно   разрезать   данный прямоугольник, если от него каждый раз отрезать квадрат наибольшей площади. Пример Входные данные Результат 7 5 5 * 5 ­ 1 2 * 2 ­ 2 1 * 1 ­ 2 5 Программа program z26; var    a,b,k,c:real; begin readln(a); readln(b); k:=0; while (a<>0)and (b<>0)  do       begin       IF  ab) AND (a<>c) AND (a<>d) AND (a<>e) AND (b<>c) AND (b<>d)AND (b<>e) AND  (c<>d) AND (c<>e) AND (d<>e) then    begin         S:=Q[a, 1]+Q[b, 2]+Q[c, 3]+Q[d, 4]+Q[e, 5];         IF S>N THEN         begin         F[1]:=A;  F[2]:=B;  F[3]:=C;  F[4]:=D;  F[5]:=E;  N:=S;         end;    end; FOR i:=1 TO 5 do writeln (P[i], '   номер лавки ­ ', F[i], '   количество денег ­', Q[F[i], i]); writeln (N); end.

Олимпиада по паскали

Олимпиада по паскали

Олимпиада по паскали

Олимпиада по паскали

Олимпиада по паскали

Олимпиада по паскали

Олимпиада по паскали

Олимпиада по паскали

Олимпиада по паскали

Олимпиада по паскали

Олимпиада по паскали

Олимпиада по паскали

Олимпиада по паскали

Олимпиада по паскали

Олимпиада по паскали

Олимпиада по паскали

Олимпиада по паскали

Олимпиада по паскали

Олимпиада по паскали

Олимпиада по паскали

Олимпиада по паскали

Олимпиада по паскали

Олимпиада по паскали

Олимпиада по паскали

Олимпиада по паскали

Олимпиада по паскали

Олимпиада по паскали

Олимпиада по паскали

Олимпиада по паскали

Олимпиада по паскали

Олимпиада по паскали

Олимпиада по паскали

Олимпиада по паскали

Олимпиада по паскали

Олимпиада по паскали

Олимпиада по паскали

Олимпиада по паскали

Олимпиада по паскали

Олимпиада по паскали

Олимпиада по паскали

Олимпиада по паскали

Олимпиада по паскали

Олимпиада по паскали

Олимпиада по паскали
Материалы на данной страницы взяты из открытых истончиков либо размещены пользователем в соответствии с договором-офертой сайта. Вы можете сообщить о нарушении.
10.02.2017