Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
ВАРИАНТ 5.doc
Скачиваний:
0
Добавлен:
01.07.2025
Размер:
111.62 Кб
Скачать

Var X, y, a, b: longint;

begin

a := 0;

b := 0;

readln(x);

while x > 0 do begin

y := x mod 10;

if y > 3 then a := a + 1;

if y < 7 then b := b + 1;

x := x div 10

end;

writeln(a);

writeln(b)

end.

21) Напишите в ответе количество различных значений входной переменной a из интервала от 1000 до 2000 (включая границы), при которых программа выдаёт тот же ответ, что и при входном значении a = 1111. Значение a = 1111 также включается в подсчёт различных значений a:

Var a, I, k: integer;

function f(x: integer): integer;

Var m: integer;

begin

if x < 10 then f := x

else begin

m := f(x div 10);

if m < x mod 10 then

f := x mod 10

else

f := m;

end;

end;

begin

k := 0;

readln(a);

for i := 1000 to a do

if f(i mod 100) = 1 then

if f(i div 100) = f(i mod 100) then

k := k + 1;

writeln(k);

end.

22) У исполнителя Калькулятор три команды, которым присвоены номера:

1. Прибавь 2

2. Прибавь 3

3. Прибавь 5

Программа для исполнителя – это последовательность команд. Сколько существует программ, которые число 20 преобразуют в число 35?

23) Сколько решений имеет система :

24) Дано натуральное число N, не превосходящее 108. Необходимо найти и вывести число, которое получится при записи N справа налево и удалении всех единиц. Ведущие нули выводить не надо. Если в числе N нет цифр кроме единиц и нулей, необходимо вывести 0. Например, при вводе числа 1984 нужно вывести 489, а при вводе 2001 нужно вывести 2. Для решения этой задачи ученик написал такую программу:

Var n, m: longint;

d: integer;

begin

read(n);

m := 0;

while n>=1 do begin

d := n mod 10;

if d > 1 then begin

m := 10*d + m;

end;

n:= (n – d) div 10;

end;

write(m);

end.

Последовательно выполните следующее.

  1. Напишите, что выведет эта программа при вводе числа 1984.

  2. Приведите пример числа, при вводе которого программа выдаст верный ответ.

  3. Найдите все ошибки в этой программе (их может быть одна или несколько). Для каждой ошибки: выпишите строку, в которой сделана ошибка, и приведите правильный вариант

строки.

Обратите внимание, что требуется найти ошибки в имеющейся программе, а не написать свою, возможно, использующую другой алгоритм решения.

25) Дан це­ло­чис­лен­ный мас­сив из 30 эле­мен­тов. Эле­мен­ты мас­си­ва могут при­ни­мать целые зна­че­ния от 0 до 1000. Эле­мент мас­си­ва на­зы­ва­ет­ся хо­ро­шим, если это дву­знач­ное число, причём цифра в раз­ря­де де­сят­ков боль­ше, чем цифра в раз­ря­де еди­ниц. Опи­ши­те на одном из язы­ков про­грам­ми­ро­ва­ния ал­го­ритм, поз­во­ля­ю­щий найти и вы­ве­сти сумму всех хо­ро­ших эле­мен­тов мас­си­ва.

Ис­ход­ные дан­ные объ­яв­ле­ны так, как по­ка­за­но ниже. За­пре­ща­ет­ся ис­поль­зо­вать пе­ре­мен­ные, не опи­сан­ные ниже, но раз­ре­ша­ет­ся не ис­поль­зо­вать часть из них.

const N=30;

var a: array [1..N] of integer;

i, j, s: integer;

begin

for i:=l to N do

readln(a[i]) ;

end.

  1. Два игрока, Петя и Ваня, играют в следующую игру. Перед игроками лежит куча камней. Игроки ходят по очереди, первый ход делает Петя. За один ход игрок может

  1. добавить в кучу один камень или

  2. увеличить количество камней в куче в три раза и убрать из кучи 1 камень.

Например, имея кучу из 10 камней, за один ход можно получить кучу из 11 или 29 камней. У каждого игрока, чтобы делать ходы, есть неограниченное количество камней. Игра завершается в тот момент, когда количество камней в куче становится не менее 33. Победителем считается игрок, сделавший последний ход, то есть первым получивший кучу, в которой будет 33 или больше камней.

В начальный момент в куче было S камней, 1 ≤ S ≤ 32.

1. При каких S: 1а) Петя выигрывает первым ходом; 1б) Ваня выигрывает первым ходом?

2. Назовите два значения S, при которых Петя может выиграть своим вторым ходом?

3. Назовите значение S, при котором Ваня выигрывает своим первым или вторым ходом.

  1. Для заданной последовательности неотрицательных целых чисел необходимо найти минимальную сумму двух её элементов, номера которых различаются не менее чем на 4. Значение каждого элемента последовательности не превышает 1000. Количество элементов последовательности не превышает 10000.

Задача А (2 балла). Напишите на любом языке программирования программу для решения поставленной задачи, в которой входные данные будут запоминаться

в массиве, после чего будут проверены все возможные пары элементов.

Задача Б (4 балла). Напишите программу для решения поставленной задачи, которая будет эффективна как по времени, так и по памяти (или хотя бы по одной из этих

характеристик).

Программа считается эффективной по времени, если время работы программы пропорционально количеству элементов последовательности N, т.е. при увеличении N в k раз время работы программы должно увеличиваться не более чем в k раз. Программа считается эффективной по памяти, если размер памяти, использованной в программе для хранения данных, не зависит от числа N и не превышает 1 килобайта.

Входные данные представлены следующим образом. В первой строке

задаётся число N – общее количество элементов последовательности.

Гарантируется, что

N > 4. В каждой из следующих N строк задаётся одно неотрицательное целое

число – очередной элемент последовательности.

Пример входных данных:

7

10

45

55

245

35

25

10

Программа должна вывести одно число – описанную в условии сумму.

Пример выходных данных для приведённого выше примера входных данных:

20