Ответы на вопросы 5-й методической олимпиады учителей информатики. Раздел 1 (тест) 1)

реклама
Ответы на вопросы 5-й методической олимпиады учителей информатики.
Раздел 1 (тест)
1)
Буква П может быть расположена в одном из 5 мест 5-буквенного
слова. В каждом из остальных 4 мест может быть или И или Р. Поэтому,
число различных кодовых слов равно 5×24= 80;
2)
Рассмотрим первое уравнение. х1, х2, х3, х4 могут иметь вид: 0000,
0001, 0010, 0011, 0100, 0101, 0110, 0111, 1000, 1001, 1010, 1011, 1100, 1101,
1110, 1111. Из них первому уравнению удовлетворяют только следующие
комбинации.
х1 х2 х3 х4
х1 х2 х3 х4
0 0 0 1
1 0 0 0
0 0 1 0
1 0 1 1
0 1 0 0
1 1 0 1
0 1 1 1
1 1 1 0
Так как второе уравнение имеет такой же вид, ему будут удовлетворять
такие же комбинации.
х3 х4 х5 х6
х3 х4 х5 х6
0 0 0 1
1 0 0 0
0 0 1 0
1 0 1 1
0 1 0 0
1 1 0 1
0 1 1 1
1 1 1 0
Рассмотрим выражение 0 0 0 1 оно получается прибавлением 0 1 к х3=0 и
х4=0. Но так как в предыдущих столбцах таких выражений 2 (они отмечены
жирным шрифтом) то выражение 0 0 0 1 будет снабжено повторителем 2.
Также повторителем 2 будет снабжено выражение 0 0 1 0. В выражении
0 1 0 0 – х3=0, х4=1. С такими значениями в предыдущих столбцах, тоже две
строки. Поэтому у 0 1 0 0 тоже будет повторитель 2. Повторитель 2 будет и у
выражения 0 1 1 1. Повторяя рассуждения для строк 1 0 0 0 и 1 1 0 1 получим:
Повторитель х3 х4 х5 х6
Повторитель х3 х4 х5 х6
2
0 0 0 1
2
1 0 0 0
2
0 0 1 0
2
1 0 1 1
2
0 1 0 0
2
1 1 0 1
2
0 1 1 1
2
1 1 1 0
Рассуждая аналогично для третьего и четвертого уравнений получим:
Повторитель х5 х6 х7 х8
Повторитель х7 х8 х9 х10
4
0 0 0 1
8
0 0 0 1
4
0 0 1 0
8
0 0 1 0
4
0 1 0 0
8
0 1 0 0
4
0 1 1 1
8
0 1 1 1
4
1 0 0 0
8
1 0 0 0
4
1 0 1 1
8
1 0 1 1
4
1 1 0 1
8
1 1 0 1
4
1 1 1 0
8
1 1 1 0
Учитывая, что в последнем столбце 8 строк, получим ответ: 64
3) 205p=2p2+5 < 123.
Учитывая, что P>5, видим, что неравенству
удовлетворяет p= 6 и p=7.
4) Учитывая, что F имеет только один ноль, можем таблицу записать в конъюнктивной нормальной форме (произведение нулей, где каждый ноль есть
сумма переменных х1-х8 или их отрицаний). В итоге, единственный ноль
будет иметь вид: X1  X2  X3  X4  X5  X6  X7  X8 ;
5) Сразу видно, что С=1 не может быть (111 принимает двойной смысл). С=10
тоже не может быть (100 принимает двойной смысл). Рассмотрим С=01.
Рассмотрим выражение 01 111 0 0. Это выражение можно прочитать по
другому 0 111 100. Рассмотрим С=000. Понятно, что его можно прочитать как
0 0 0. Пусть С=001. Рассмотрим выражение 001 111 0 0. Это выражение
можно прочитать как 0 0 111 100. Выражения 0 100 и 010 0 показывают, что
С≠010.
С≠011 из-за того что выражение 011100 имеет двойной смысл
(011 100 и 0 111 0 0). С≠011 из-за того что двойной смысл имеет 011100
(011 100 и 0 111 0 0). Рассмотрим С=101. В этом случае к нему сзади нельзя
пристроить ни нули ни единицы. Так как впереди окажется 10, к которому
спереди нельзя присоединить ни нуля ни единицы. Если же мы 19
представим как 1 0, то с единицей на конце нет ни двузначного ни
однозначного кода кроме 10 или 11. К этим же цифрам спереди ничего не
приставишь. Ответ: 101;
6) Рассмотрим два ряда чисел
1 2 2 3 3 5 5 7 7 10 10 13 13 18 18 23 23 30 30 37 37 47
13 13
2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29
Ряд внизу представляет собой траекторию. Ряд сверху – количество
программ, используя которые, можно получить число соответствующее
нижнему ряду. Например, чтобы получить число 3 нужна одна программа , к
2 прибавить 1. Число 4 можно получить двумя способами, либо к 3
прибавить два, либо 2 умножить на 2. Способов получить число 5 столько же
сколько способов получить число 4, так как число 5 можно получить только
прибавлением 1 к числу четыре. Тем самым мы вместо числа 4 переходим к
числу 5 и все способы получения числа 4 переходит к числу 5. Из таблицы
видно, что для получения числа 24 имеется 47 способов. Затем пропуск над
числом 25, так как этого числа не должно быть в траектории. Над числом 26
тоже пропуск так как его можно получить только умножением числа 13 на 2,
но при этом число 14 в траекторию не войдет. Ответ: 13.
7)
Пусть P – выражение X&A=0, Q – выражение X&20=0, R –
выражение X&5=0. Исходное высказывание примет вид ¬P→(Q→¬R). Или
P ∪ (Q→¬R)= P ∪ (¬Q∪¬R)= (¬Q∪¬R) ∪ P= ¬(¬Q∪¬R)→P=(Q ∩ R)→P.
Рассмотрим выражение Q. (xxxxxxxx)&(00010100)=0. Отсюда X=xxx0x0xx.
Аналогично из R получим Х=ххххх0х0. Так как Q и R должны выполняться
одновременно, получим Х=ххх0х0х0. Рассмотрим выражение P.
(xxx0x0x0)&(aaaaaaaa)=0
Это выражение должно равняться нулю при любых х, поэтому А=(000а0а0а).
Максимальное А будет равно 00010101=21.
8) Из того, что первые два байта IP – адреса узла и адреса сети совпадают
следует, что первые два байта маски заполнены единицами, т.е. равны 255.
Рассмотрим третий байт IP – адреса узла. Он равен 228. Третий байт сети
равен 128. Превратим эти числа в восьмеричные
228 |8
128 |8
224 28 |8
128 16 |8
4 24 3
0 16 2
4
0
Мы получили 228=3448,
128=2008. Превратим восьмеричные числа в
двоичные. Для этого каждую восьмеричную цифру превращаем в 3
двоичные. (См. [1]). 3448 =111001002, 2008=100000002. В итоге имеем
ХХХХХХХХ
&
11 100100
10 000000
Такой результат при побитовой конъюнкции может получиться (учитывая,
что в маске вначале идут единицы, а затем нули) только если маска равна
100000002=128.
9) Эту задачу проще решить
спользуя круги Эйлера. Шахматы | Теннис =7770.
Отнимем отсюда
чистый теннис получим 7770 – 5500=2270. Если сюда добавим пересечение,
то получим объем запроса шахматы. 2270+1000=3270.
Ответ: 3270 байтов.
10) Обозначим через P условие x∈ {1,3,5,7,9,12}, через Q условие
x ∈ {3,6,9,12}, через R условие x ∈ A. Тогда исходное выражение примет вид
(P → Q) ∪ R. Или P̅ ∪ Q ∪ R. Это выражение должно быть истинным при
любом х. Рассмотрим выражение ̅
P. Это означает что х удовлетворяют все
натуральные числа кроме 1,3,5,7,9,12. К нему добавляется множество Q, то
есть числа 3,6,9,12. Тогда, х удовлетворяют все числа кроме 1,5,7.
Следовательно, если А будет содержать эти числа, то исходному выражению
будут удовлетворять все х принадлежащие натуральным числам.
Минимальное А будет содержать только числа 1, 5, 7. Их сумма равна 13.
Раздел 2 Найди ошибку или сделай на компьютере.
1) Имеем A+Aq+Aq2=30 или A(1+q+q2)=30. Это возможно в некоторой
системе счисления. (A(1+q+q2))x=(30)x=3x. Это означает, 1+q+q2 должно
делиться на три. Это возможно если q при делении на 3 дает остаток 1.
Так как q<>1 и q не может быть четным то минимальное q равно 7.
2) Третий доехал до пункта В за час и целый час ждал второго. так что его
общее время 8 часов.
3) Рассмотрим:
not(((y<x*x) or (y>1) or (x>0)) and ((x<0) or (y<0) or (y>1) or (y<2-x)))
Применяя к этому выражению правило Моргана, получим:
¬((y<x*x) or (y>1) or (x>0)) or ((x<0) or ¬(y<0) or (y>1) or (y<2-x))
Опять применяем правило Моргана
(y>=x*x) and (y<=1) and (x<=0) or (x>=0) and (y>=0) and (y<=1) and (y>=2-x)
Рассматривая график видим, что вместо y>=2-x должно быть y<=2-x.
Ошибкой является выражение (y<2-x).
4) Программа на языке Visual Basic.
Sub table()
Dim i, j, n, m As Integer
Dim a, h, s As Double
Worksheets("Лист1").Activate
Randomize: h = 0.1: a = 2.1
For i = 2 To 21
For j = 2 To 21
Cells(i, j) = Int(1000 * Rnd()) + 1
Next j
Next i
Worksheets("Лист2").Activate
For i = 2 To 21
For j = 2 To 21
Cells(i, j) = a * Worksheets("Лист1").Cells(i, j)
a=a+h
Next j
Next i
Worksheets("Лист3").Activate
For i = 2 To 21
For j = 2 To 21
Cells(i, j) = Worksheets("Лист1").Cells(i, j) + Worksheets("Лист2").Cells(i, j)
a=a+h
Next j
Next i
End Sub
5) Программа на языке Visual Basic.
Sub Kniga()
Dim mparagraph As Paragraph
For Each mparagraph In ActiveDocument.Paragraphs
With mparagraph
If .Range.Words.Count >= 3 Then
.Range.Words(1).Italic = True
End If
End With
Next mparagraph
End Sub
Раздел 3. Подумай!
1) Пусть в мешок поместили х шуб, тогда число курток равно 20-4х.
Условия таможни будут х+20 -4х ≤11. Или х≥3. Обозначим суммарную
стоимость вещей положенных в мешок через S. Тогда:
S=60000х+20000(20-4х)=20000(3х+20-4х)=20000(20-х).
Следовательно, S будет максимальным при х=3. Максимальная
S=340000.
2) Применим метод резолюций. Обозначим: Н – Никифор вежлив со
мной, Д – Несчастливый день. С – среда, П – пасмурный день, З – берут
̅ , С→П,
с собой зонт. Дж – идет дождь. Высказывания имеют вид: Н→Д
̅ →С, Дж→З, Д
̅ →П
̅ . По правилу импликации имеем
З→П, Н
̅∪Д
̅
Н
С̅ ∪ П
З̅ ∪ П
Н∪С
̅̅̅̅ ∪ З
Дж
̅
Д∪ П
̅̅̅̅. Чтобы
Сокращая по правилу резолюций, получим в остатке П и Дж
получить ноль их надо одновременно отрицать. То есть мы должны к
̅ . Это предположение приводит к
высказываниям добавить Дж и П
противоречию. Следовательно, верным будет отрицание нашей
̅.
добавки. Таким образом мы должны отрицать выражение Дж ∩ П
̅̅̅̅ ∪ П. Применяя правило
Применив правило Моргана получим Дж
импликации получим Дж→П. Дождливые дни пасмурны.
3) Баку-Уфа.
4) Задача сводится к игре двух игроков Наф-Наф и объединенная
команда Ниф-Нифа и Нуф-Нуфа. Выигрывает Наф-Наф. После пнрвого
хода Ниф-Нифа в корзине окажется от 28 до 32 желудей. Наф-Наф
должен взять столько, чтобы в корзине осталось 27 желудей. Ниф-Ниф
и Нуф-Нуф вместе возьмут не больше 8 желудей. Наф-Наф, в этом
случае, может оставить в корзине 18 желудей. Опять ходят Ниф-Ниф и
Нуф-Нуф. Теперь Наф-Наф оставляет в корзине 9 желудей и после
очередного хода Ниф-Нифа и Нуф-Нуфа забирает последние желуди.
5) 111111 и 333333 делятся на 7. Следовательно, на 7 делятся и 2016
единиц и 2016 троек. Исходное число можно разбить на число
состоящее из 2016 троек, число первой цифрой которого является А за
которой располагаются 2016 нулей и число с 2016 единицами за
которы стоит 2017 нулей. Так как первое и третье число на 7 делятся.
рассмотрим второе число. Понятно что при А равном нулю или 7
исходное число на 7 делится. Рассмотрим А=1. Т.е. число 1 с 2016
нулями. 10 при делении на 7 дает остаток 3. Спустим сверху ноль.
Число 30 при делении на 7 дает остаток 2. Рассмотрим число 20. При
делении на 7 оно дает остаток 6. Число 60 при делении на 7 дает
остаток 4. Число 40 при делении на 7 даст остаток 5. Опять, спуская
сверху ноль, получим число 50. При делении на 7 мы опять получим 1.
Получили цикл. Это доказывает, что если А равно натуральному числу
меньшему чем 7, то число А с 2016 нулями на 7 не делится. Пусть А
равно 8 или 9. Тогда это число в свою очередь можно разбить на сумму
в которой первое число это 7 с 2016 нулями, второе число 1 или 2 с
2016 нулями. Первое число на 7 делится, второе, как мы доказали, нет.
В итоге получаем, что исходное число делится на 7 если А равно 0 или
7.
6) Пусть стопка состоит из 3 брикетов. Рассмотрим трехзначные двоичные
числа 000, 001, 010, 011, 100, 101, 110, 111. Пусть 0 означает соленую
рыбу 1 – копченую. Понятно, что из приведенного набора не должно
быть стопки 010. Поэтому для стопки из 3 брикетов – ответ 7.
Рассмотрим два последних брикета из этой стопки. Пусть А список.
А={00, 01, 11, 00, 01, 10, 11}. Стопка из 4 брикетов получится
добавлением 0 или 1 к числам этого списка. В итоге опять должны
появится числа 000, 001, 011, 100, 101, 110, 111. Запишем их в виде:
234
2 000
2 001
2 011
1 100
1 101
2 110
2 111
Здесь в первой строке стоят номера брикетов. Брикет 000 появится
если мы добавим 0 в 1-й и 4-й элемент списка А. Поэтому перед 000
стоит повторитель 2. Брикет 001 появится если мы добавим 1 в 1-й и
4-й элемент списка А. Поэтому перед 001 тоже стоит повторитель 2.
Элемент 011 получается если мы добавим 1 к 2-му и 5-му элементу
списка А. Поэтому перед 011 стоит повторитель 2. Рассмотрим элемент
100. Он получится если мы прибавим 0 к 6-му элементу списка А. Он в
списке один, поэтому перед 100 стоит повторитель 1. Аналогично
получаем остальные повторители. Таким образом стопку из 4 брикетов
можно получить 12 способами.
Совершенно аналогично для стопок из 5, 6, 7 и 8 брикетов, получим.
345
456
567
678
3 000
5 000
9 000
16 000
3 001
5 001
9 001
16 001
3 011
5 011
9 011
16 011
2 100
4 100
7 100
12 100
2 101
4 101
7 101
12 101
4 110
7 110
12 110
21 110
4 111
7 111
12 111
21 111
Итак, стопку из 8 брикетов можно уложить 114-ю способами.
Конкурс одной задачи
Пусть мы имеем k камней. Из них m камней в большей куче и n камней в
меньшей куче. Составляем зону абсолютного выигрыша. Это если число
камней в обеих кучах >39. Затем находим наибольшее n, число камней в
меньшей куче ( n=k div 2 ). Тогда m=k-n. Теперь, последовательно находим
m:=m*2, n:=n*2, m:= m+1, n:=n+1 и каждый раз находим k1=n+m. Если k1 хотя
бы раз окажется в зоне абсолютного выигрыша или если при всех k1 число
камней в большей куче (m) хотя бы раз не окажется в списке с номером k1,
то число камней в большей куче присоединяем к с списку выигрышей с
номером k. Уменьшаем m на 1 и опять находим m:=m*2, n:=n*2, m:= m+1,
n:=n+1, находим k1 и т.д. Опять уменьшаем m на 1 и повторяем процесс до
тех пор, пока m не станет меньше n. Тем самым мы вычислили все m для
которых при k=m+n первый игрок выигрывает. Уменьшаем k на 1 и
повторяем все рассуждения.
Ответ:
Число камней в обеих кучах
Число камней в большой куче у 1-го
игрока, дающего ему выигрыш.
30
15-30
29
15-29
28
14-28
27
14-27
26
25
24
23
22
21
20
19
18
17
16
15
14
13
14-26
13, 15-25
13, 14, 16-24
12, 14, 15, 17-23
12, 13, 15, 16, 18-22
11, 13, 14, 16,17, 19-21
11,12, 14,15, 17, 18, 20
10, 12,13, 15,16, 18, 19
10 -17
9, 17
9 -16
8 - 11, 13
11-14
7-10
12
7-12
11
6, 8
10
6-10
9
5-9
8
7
7
4-7
6
4-5
5
3, 5
4
3-4
3
2-3
2
1
Для решения этой задачи можно написать программу.
type digit = set of 1..100;
var i,j,k,a,b,n,m: integer; mnog: array[1..100] of digit;
begin assign(output,'input.txt'); rewrite(output);
k:=26; for i:=27 to 39 do mnog[i]:=[1..39];
while k>0 do
begin
n:=k div 2; m:=k-n; i:=k;
while i>=m do
begin j:=0;
n:=k-i; if 2*i+n>39 then mnog[k]:=mnog[k]+[i] else
begin a:=2*i+n; if 2*i in mnog[a] then j:=j+1;
a:=2*n+i; if 2*n>i then b:=2*n else b:=i;
if n=0 then j:=j+1 else if b in mnog[a] then j:=j+1;
if i+1 in mnog[k+1] then j:=j+1;
if n+1>i then b:=n+1 else b:=i;
if b in mnog[k+1] then j:=j+1;
if j<4 then include(mnog[k],i);
end; i:=i-1
end;
k:=k-1;
end; for j:=30 downto 1 do begin
for i:=1 to 30 do if i in mnog[j] then write(i,' '); writeln end;
end.
1
Скачать