Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
пробный 2012 - 8.docx
Скачиваний:
0
Добавлен:
17.09.2019
Размер:
90.02 Кб
Скачать

1. Прибавь 1

2. Прибавь 3

3. Умножь на 2

Сколько есть программ, которые число 3 преобразуют в число 15? Ответ обоснуйте.

  1. Вам необходимо написать программу распознавания чисел, записанных прописью. Сначала на вход программе подается обучающий блок, состоящий из 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

  1. Таблица.

Обл.

y <= 3-x*x

y >= 0

y >= x+1

вывод

верно?

A

нет

нет

B

нет

нет

C

да

нет

нет

D

да

нет

нет

E

да

да

нет

не принадлежит

да

F

да

да

да

принадлежит

да

G

да

да

да

принадлежит

да

H

да

да

нет

не принадлежит

нет

  1. Решение на Паскале:

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.

  1. Ответ: 102.

  1. Полная программа:

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.