Фронтальная работа по информатике. 10 класс. Вариант 2

1. (3 балла) На вход программе подается три целых числа. Известно, что какие-то два из этих чисел одинаковы, а третье отличается от них. Вывести на экран номер отличающегося числа (1, 2 или 3) и то, в какую сторону оно от них отличается ("больше" или "меньше") (2 балла).

Дополнительно: программа выполняет в худшем случае не более 3-х сравнений

(1 балл).

Пример ввода

Пример вывода

30 30 25

3 меньше

15 20 15

2 больше

1 меньше

Решение:

var a, b,c:integer;

begin readln(a, b,c);

if a=b then if a>c then writeln(3,' меньше')

else writeln(3,' больше')

else if a=c then if a>b then writeln(2,' меньше ')

else writeln(2,' больше ')

else if a<b then writeln(1,' меньше ')

else writeln(1,' больше ')

end.

2. (3 балла) На вход программе подается натуральное число N. Вывести на экран вертикально все делители числа N. После каждого четного делителя, вывести знак "#". (2 балла).
Дополнительно: после списка делителей вывести сумму нечетных делителей (1 балл).

Пример ввода

Пример вывода

24

1

2#

3

4#

6#

8#

12#

24#

4

Решение:

var a, s,i:integer;

begin s:=0;

readln(a);

for i:=1 to a do

if a mod i=0 then

begin write(i);

if i mod 2<>0 then s:=s+i else write('#');

writeln;

end;

writeln(s);

end.

3. (3 балла) На вход программе подается целочисленный массив из n элементов (n — константа, например, 10). Известно, что значения элементов массива находятся в диапазоне –1000..+1000. Программа должна найти и вывести на экран номер наибольшего элемента массива, который делится на 11, и при этом не оканчивается на 2. Если ни одного такого элемента нет, программа должна вывести "NO".

НЕ нашли? Не то? Что вы ищете?

Пример ввода

Пример вывода

-5

6

-5

NO

Решение:

const n=10;

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

i, max, j:integer;

begin max:=-1100;

for i:=1 to n do

begin read(a[i]);

if (a[i] mod 11=0)and(a[i]mod 10<>2)and(a[i]>max) then

begin max:=a[i];

j:=i;

end;

end;

if max>-1100 then writeln(j) else writeln('NO');

end.

4. (1,5+1,5 балла) На вход программе подается последовательность символов, пока не будет введен символ решетка (#). Программа (одна (!) программа) должна:

а) вывести сообщение о том, есть ли в последовательности другие символы, кроме цифр и заглавных латинских букв (не считая #) ("YES"/"NO").

б) вывести сумму последних двух цифр или сообщение, что этого сделать нельзя ("NO");

Пример ввода

Пример вывода

HA4SD3F9ILL5SD8SD#

NO

13

HASD7F sda SDJSD#

YES

NO

Решение (Востоков Саша):

var c:char;

t:boolean;

a, b:integer;

begin t:=true; a:=-1; b:=-1;

read(c);

while c<>'#' do

begin t:=t and(((c>='0')and(c<='9'))or((c>='A')and(c<='Z')));

if (c>='0')and(c<='9') then

begin b:=a;

a:=strtoint(c);

end;

read(c);

end;

if t then writeln('NO') else writeln('YES');

if b=-1 then writeln('NO') else writeln(a+b);

end.

5. (3 балла) Дана программа:

var x, L, M :integer;

begin

readln(x);

M := 0;

L := 0;

while x > 0 do

begin

if x mod 2 = 0 then

L := L + 1;

M := M + 1;

x := x div 2

end;

writeln(L,' ',M)

end.

а) Выполните трассировку программы для числа x=26, введенного с клавиатуры. Для этого заполните таблицу (1 балл):

x

L

M

На экране

В каждой строчке таблицы должна быть заполнена только одна ячейка (изменяемая в данный момент переменная или то, что выводится на экран).

б) Опишите, что вычисляет программа в переменных L и M (0,5+0,5 балла).

в) Укажите наименьшее x, при котором программа выводит на экран два числа: 7 4. Обоснуйте свой ответ (1 балл).

Решение:

а)

x

L

M

На экране

26

0

0

1

1

13

1

2

6

2

3

3

2

4

1

2

5

0

2 5

б) L – количество нулей в двоичной записи числа, М – количество цифр в двоичной записи числа.

в) Если L=4, а М=7, то в двоичной записи наименьшее число будет:

x==6710

6. (4 балла) На вход программе сначала подается натуральное число N, затем еще N целых чисел. Каждое из этих чисел находится в диапазоне: –1000..+1000. Программа должна вывести на экран, верно ли, что среди введенных чисел между значением первого введенного числа и наибольшим значением нет ни одного числа (в этом числовом диапазоне нет чисел этой последовательности) ("YES"/"NO").

Пример ввода

Пример вывода

Пояснение

8

1 2

YES

Наибольшее: 13, первое: 10.
Между 10 и 13 нет чисел

8

1 2

NO

Наибольшее: 13, первое: 10.
Между 10 и 13 есть число 12

Решение (Востоков Саша):

var t:boolean;

n, i,a, b,max:integer;

begin t:=false;

readln(n);

read(a);

b:=a;

max:=a;

for i:=2 to n do

begin read(a);

if a>max then max:=a else t:=t or((a<max)and(a>b));

end;

if not t then writeln('YES') else writeln('NO');

end.

7. (4 балла) На вход программы подается непустая последовательность из целых чисел. Каждое из этих чисел находится в диапазоне: –1000..+1000. Признаком окончания последовательности является число 0. Программа должна вывести на экран такую нечетную цифру, на которую чаще всего заканчиваются введенные числа. Если такой цифры нет, вывести "NO" (3 балла).
Дополнительно: Если есть несколько вариантов ответа, программа должна вывести всех их (1 балл).

Пример ввода

Пример вывода

45 -

5

11 -506 0

1 3 5

12

NO

Решение:

var i, a:integer;

m:array[0..9] of integer;

begin for i:=0 to 9 do m[i]:=0;

read(a);

while a<>0 do

begin m[abs(a) mod 10]:=m[abs(a) mod 10]+1;

read(a);

end;

a:=0;

for i:=1 to 9 do

if (m[i]>a) and(i mod 2<>0) then a:=m[i];

if a<>0 then

begin

for i:=1 to 9 do

if (m[i]=a)and(i mod 2<>0) then write(i,' ')

end else write('NO');

writeln;

end.