Школьная олимпиада по информатике
2013–2014 уч. года
- «Лишние буквы – 100 баллов».
Четвероклассник Петя сложил из карточек с прописными буквами слово. Оставшиеся карточки с буквами он убрал в ящик стола. Перед приходом из школы его брата Васи Петя смешал карточки, из которых он составил слово. Когда первоклассник Вася увидел на столе карточки с буквами, он попытался из них составить свое слово. Определите, какие карточки с буквами из Петиного набора не использовал Вася, если известны слово, которое собрал Петя и слово, которое собрал Вася.
Ваша программа должна
- Запросить слово, которое собрал Петя;
- Запросить слово, которое собрал Вася;
- Найти и вывести на экран в любом порядке буквы, которые использовал Петя, но не использовал Вася или вывести на экран сообщение о том, что Вася использовал все карточки с буквами Пети.
Пример: Слово Пети ТОРТ
Слово Васи РОТ
Не использована карточка с буквой Т
Решение авторов олимпиады (FreePascal).
program lishnie;
uses crt;
var i,j:integer;
p,v,pp:string;
b:char;
begin
write('Слово Пети ');readln(p);
write('Слово Васи ');readln(v);
pp:=p;
for i:=1 to length(v) do
begin
b:=v[i];j:=pos(b,pp);delete(pp,j,1);
end;
if pp<>'' then
writeln('Не использованы карточки с буквами ',pp)
else
writeln('Использованы все карточки');
readkey;
end.
- «Деление – 100 баллов».
Петя Васечкин хочет выяснить, делится ли на 7 натуральное число, состоящее не более чем из 60 цифр. Требуется написать программу, которая выполняет желание Пети и находит остаток от деления введенного числа на 7.
Составьте программу, которая
- Читает натуральное число a, которое может содержать до 60 цифр;
- Находит и выводит на экран остаток от деления a на 7.
Примеры:
Исходное число 14 Остаток 0
Исходное число 101 Остаток 3
Решение авторов олимпиады:
program delenie;
uses crt;
var i,n,ostatok,x,code:integer;
s:string;
begin
write('a= ');readln(s);
n:=length(s);ostatok:=0;
for i:=1 to n do
begin
val(s[i],x,code);
ostatok:=(ostatok*10+x) mod 7;
end;
writeln('Остаток ',ostatok);
readkey;
end.
- «К единице – 100 баллов».За один ход с числом делается такая операция: если число не делится на 3, то вычитаем 1, а если делится, то делим на 3. Так из числа 39 единица получается за 5 таких ходов (имеется в виду цепочка 39 – 13 – 12 – 4 – 3 – 1). Какое наименьшее натуральное число превращается в единицу за k (0 ≤ k ≤ 37) таких ходов?
Программа должна
- Запросить число ходов k (натуральное число, 0 ≤ k ≤ 37);
- Найти и вывести на экран наименьшее натуральное число, которое превращается в единицу за k таких ходов.
Пример: Число ходов 5 Искомое натуральное число 14
Решение предложенное авторами олимпиады:
program chislo;
uses crt;
var n,k,kk,r:longint;
begin
write('k=');readln(k);
n:=0;kk:=-1;n:=0;
while (kk<>k)do
begin
inc(n);r:=n;kk:=0;
while r>1 do
if r mod 3=0 then
begin r:=r div 3;inc(kk); end
else
if r>1 then begin r:=r-1;inc(kk) end;
end;
writeln('n=',n);
readkey;
end.
|