1. Прибавь 1
2. Прибавь 3
3. Умножь на 2
Сколько есть программ, которые число 3 преобразуют в число 15? Ответ обоснуйте.
Вам необходимо написать программу распознавания чисел, записанных прописью. Сначала на вход программе подается обучающий блок, состоящий из 27 строк. Первые 9 строк содержат слова «один», «два», ..., «девять», следующие 9 строк - слова «одиннадцать», «двенадцать», ... «девятнадцать», следующие 9 строк - слова «десять», «двадцать», ..., «девяносто». Все слова записаны маленькими русскими буквами без лишних пробелов в начале и в конце строки.
Затем на вход программе подается значение N - количество записей, которые необходимо обработать. Следующие N строк содержат записанные словами числа. Каждое число записано по-русски, маленькими буквами, без ошибок. Если число состоит из нескольких слов, между словами находится ровно один пробел, лишних пробелов в начале и в конце строк нет.
Напишите эффективную программу, которая определит сумму тех входных чисел, которые находятся в интервале от 1 до 99.
Размер памяти, которую использует Ваша программа, не должен зависеть от длины исходного списка.
Перед текстом программы кратко опишите используемый вами алгоритм решения задачи.
Пример входных данных (обучающий блок показан в примере с сокращениями):
один
два
…
девяносто
5
двадцать восемь
два миллиона
четырнадцать
сто двадцать три
тысяча девятьсот восемьдесят четыре
Пример выходных данных для приведённого выше примера входных данных:
42
Ответы и решения
A1 |
A2 |
A3 |
A4 |
A5 |
A6 |
A7 |
A8 |
A9 |
A10 |
A11 |
A12 |
A13 |
4 |
1 |
3 |
4 |
3 |
3 |
2 |
2 |
3 |
4 |
3 |
2 |
2 |
|
75 |
|
3 |
|
25 |
|
183 |
|
3 |
|
12 |
|
985 |
|
5,13,21 |
|
18 |
|
1380 |
|
7235 |
|
30 |
|
13 |
|
3 |
|
18 |
Таблица.
-
Обл.
y <= 3-x*x
y >= 0
y >= x+1
вывод
верно?
A
нет
–
–
–
нет
B
нет
–
–
–
нет
C
да
нет
–
–
нет
D
да
нет
–
–
нет
E
да
да
нет
не принадлежит
да
F
да
да
да
принадлежит
да
G
да
да
да
принадлежит
да
H
да
да
нет
не принадлежит
нет
Решение на Паскале:
const N=30;
var a: array [1..N] of integer;
i, j, min, min2, s: integer;
begin
for i:=1 to N do readln(a[i]);
min:=1; min2:=2;
s:=abs(a[1]-a[2]);
for i:=1 to N-1 do
for j:=i+1 to N do
if abs(a[i]-a[j]) < s then begin
s:=abs(a[i]-a[j]);
min:=i; min2:=j;
end;
writeln(min, min2);
end.
Ответ: 102.
Полная программа:
var sum, i, j, N: integer;
s: string;
words: array[1..99] of string;
begin
for i:=1 to 9 do readln(words[i]);
for i:=1 to 9 do readln(words[10+i]);
for i:=1 to 9 do readln(words[10*i]);
for i:=2 to 9 do
for j:=1 to 9 do
words[10*i+j] := words[10*i] + ' ' + words[j];
readln(N);
sum:=0;
for i:=1 to N do begin
readln(s);
for j:=1 to 99 do
if s = words[j] then begin
sum:=sum + j;
break;
end;
end;
writeln(sum);
end.