решение 11.2 - Гимназия №1 имени К.Калиновского г.Свислочь

advertisement
Информатика, задание 2
11 класс, решение
Стрелки
Задана последовательность, состоящая только из символов ‘>’, ‘<’ и ‘-‘. Требуется
найти количество стрел, которые спрятаны в этой последовательности. Стрелы – это подстроки вида ‘>>-->’ и ‘<--<<’.
Входные данные
В первой строке входного файла INPUT.TXT записана строка, состоящая из символов
‘>’, ‘<’ и ‘-‘ (без пробелов). Строка состоит не более, чем из 250 символов.
Выходные данные
В единственную строку выходного файла OUTPUT.TXT нужно вывести искомое количество стрелок.
Пример
№
INPUT.TXT
1 <<<<>>--><--<<--<<>>>--><<<<<
OUTPUT.TXT
4
Решение:
Задача сводиться к тому, чтобы проходя по строке проверять сразу 4 элемента строки и
если они являются стрелкой то увеличивать счётчик.
var f,f1:text;
n:string;i,kol,m:byte;
begin
assign(f,'input.txt');
assign(f1,'output.txt');
reset(f);
rewrite(f1);n:=n+'=';
read(f,n);
m:=length(n);
for i:=1 to m-3 do begin
if (n[i]='<')and(n[i+1]='-')and(n[i+2]='')and(n[i+3]='<')and(n[i+4]='<')then kol:=kol+1;
if (n[i]='>')and(n[i+1]='>')and(n[i+2]='-')and(n[i+3]='')and(n[i+4]='>')then kol:=kol+1;
end;
writeln(f1,kol);
close(f);close(f1);
end.
Нумеролог
Синица А.А., гимназия №1 имени К.Калиновского г.Свислочь
Информатика, задание 2
Чтобы предсказать судьбу человека, нумеролог берет время жизни человека в секундах, затем складывает все цифры этого числа. Если полученное число состоит более чем
из одной цифры, операция повторяется, пока в числе не останется одна цифра. Затем по
полученной цифре и числу операций, необходимых для преобразования числа в цифру
нумеролог предсказывает судьбу человека. Нумеролог плохо умеет считать, а числа, с которыми он работает, могут быть очень большими. Напишите программу, которая бы делала все расчеты за него.
Входные данные
Входной файл INPUT.TXT содержит число N – время жизни человека в секундах (1 ≤
N ≤ 101000).
Выходные данные
В выходной файл OUTPUT.TXT выведите два числа через пробел: полученную цифру
из числа N и число преобразований.
Примеры
№
INPUT.TXT
OUTPUT.TXT
1 1
1 0
2 10
1 1
3 99
9 2
Распаковка строки
Будем рассматривать только строчки, состоящие из заглавных латинских букв.
Например, рассмотрим строку AAAABCCCCCDDDD. Длина этой строки равна 14. Поскольку строка состоит только из латинских букв, повторяющиеся символы могут быть
удалены и заменены числами, определяющими количество повторений. Таким образом,
данная строка может быть представлена как 4AB5C4D. Длина такой строки 7. Описанный
метод мы назовем упаковкой строки.
Напишите программу, которая берет упакованную строчку и восстанавливает по ней
исходную строку.
Входные данные
Входной файл INPUT.TXT содержит одну упакованную строку. В строке могут встречаться только конструкции вида nA, где n — количество повторений символа (целое число от 2 до 99), а A — заглавная латинская буква, либо конструкции вида A, то есть символ
без числа, определяющего количество повторений. Максимальная длина строки не превышает 80.
Синица А.А., гимназия №1 имени К.Калиновского г.Свислочь
Информатика, задание 2
Выходные данные
В выходной файл OUTPUT.TXT выведите восстановленную строку. При этом строка
должна быть разбита на строчки длиной ровно по 40 символов (за исключением последней, которая может содержать меньше 40 символов).
Примеры
№
INPUT.TXT
1 3A4B7D
22D7AC18FGD
2
95AB
3
4
40AB39A
OUTPUT.TXT
AAABBBBDDDDDDD
DDDDDDDDDDDDDDDDDDDDDDAAAAAAACFFFFFFFFFF
FFFFFFFFGD
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAB
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
BAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
Решение:
В этой задаче нужно уметь работать со строками иначе её не решить. Читаем цифры пока не найдем букву, преобразовываем символы в цифры и выводим ту букву
что мы нашли то количество раз, которые мы прочитали.
var f,f1:text;
s:char;n,sum,m,x,i:longint;
begin
assign(f,'input.txt');
assign(f1,'output.txt');
reset(f);rewrite(f1);
while not eof (f) do
begin
i:=i+1;
read(f,s);
val(s,x,m);
sum:=sum+x;
end;
if i=1 then writeln(f1,sum,' ',0) else begin
m:=sum;i:=1;
while m div 10>0 do
begin
i:=i+1;sum:=m;m:=0;
while sum>0 do
begin
m:=m+sum mod 10;
sum:=sum div 10;
end;
end;
writeln(f1,m,' ',i); end;
Синица А.А., гимназия №1 имени К.Калиновского г.Свислочь
Информатика, задание 2
close(f);close(f1);
end.
Рунные слова
Руны — это древние магические знаки, которые наши предки использовали как буквы.
Говорят, что рунные знаки обладают магическими свойствами, а при сложении рун в слова их магическая сила многократно возрастает. Если кузнец изготовит доспехи и начертит
там определенные руны в определенном порядке, то доспехи будут наделены необычайными магическими силами.
Для того, чтобы стать обладателем таких доспехов достаточно просто принести кузнецу начертания этих рунных знаков. А вот, чтобы стать обладателем рунного знака приходилось немало потрудиться. Воины добывали начертания рун других языков и наречий в
боях или получали их в качестве наград в благодарность за оказанные услуги.
Но так или иначе и в этом деле развелись жулики. По подозрениям ученых кузнец Игнатус Мошеникус изготавливал благородным воинам фальшивые рунные слова. Из древних преданий ученым стало достоверно известно, что каждая руна записывается из двух,
трех или четырех латинских букв. Причем первая буква рунного слова всегда записывается как заглавная, а все остальные являются маленькими. Ученые перевели несколько, выкованных этим кузнецом, рунных слов на латинский язык и теперь нуждаются в Вашей
помощи. Проверьте, является ли приведенное слово рунным.
Входные данные
В единственной строке входного файла INPUT.TXT содержится слово. Оно представляет собой непустую строку, длиной не более 100000 символов, содержащую только
большие и маленькие буквы латинского алфавита.
Выходные данные
В выходной файл OUTPUT.TXT выведите «Yes», если слово является рунным и «No»
в противном случае.
Пример
№
INPUT.TXT
1 IoIsTheBest
2 IoItIsWaste
OUTPUT.TXT
Yes
No
Решение:
В этой задаче на нужно проверять строку на условия, сделав это, мы находим ответ.
var f,f1:text;
st:string;
k,z,i:longint;
Синица А.А., гимназия №1 имени К.Калиновского г.Свислочь
Информатика, задание 2
begin
assign(f,'input.txt');
assign(f1,'output.txt');
reset(f);
rewrite(f1);
read(f,st);
if st[1] in['a'..'z'] then z:=1
else
begin k:=1;
for i:=2 to length(st) do
begin
if st[i] in ['A'..'Z'] then
begin
if k=1 then z:=1;
if k>4 then z:=1;
if (k<>1)and(k<=4) then k:=1;
end;
if st[i] in ['a'..'z'] then
begin
if k=4 then z:=1;
if (k>0)and(k<4) then k:=k+1;
end;
end;
end;
if (z=0)and(k>1) then writeln(f1,'Yes') else writeln(f1,'No');
close(f);
close(f1);
end.
Синица А.А., гимназия №1 имени К.Калиновского г.Свислочь
Download