Решение ЕГЭ по информатике. Решение первой части на Python. Переменная Переменная Переменная Переменная Функция 0 0 0 0 0 0 0 0 0 vk com99ballov inf vk com99ballov infaa Определите, при каком наименьшем введённом значении переменной s программа
Скачать 1.7 Mb.
|
vk.com/99ballov_inf vk.com/99ballov_infaa instagram.com/danil99ballov/ youtube.com/channel/UCMaXzRQ7_TpfVWgbEXQOH7w vk.com/99ballov_inf vk.com/99ballov_infaa Логическая функция F задается выражением ( x z ) ( y ( w v x ) Дан частично заполненный фрагмент, содержащий неповторяющиеся строки таблицы истинности функции F. Определите, какому столбцу таблицы истинности соответствует каждая из переменных x, y, z, В ответе напишите буквы x, y, z, w в том порядке, в котором идут соответствующие им столбцы ( сначала - буква, соответствующая первому столбцу затем - буква, соответствующая второму столбцу, и т.д.). Буквы в ответе пишите подряд, никаких разделителей между буквами ставить ненужно. Инверсия = ЕСЛИ(А2=1;0;1); 2. Дизъюнкция = ЕСЛИ(ИЛИ(А2=1;В2=1);1;0); 3. Конъюнкция = ЕСЛИ(И(А2=1;В2=1);1;0); 4. Импликация = ЕСЛИ(И(А2=1;В2=0);0;1); 5. Эквивалентность ЕСЛИ(А2=В2;1;0). Переменная Переменная Переменная Переменная Функция 0 0 0 0 0 0 0 0 0 vk.com/99ballov_inf vk.com/99ballov_infaa Определите, при каком наименьшем введённом значении переменной s программа выведет число 256. var s, n: integer; begin readln (s); n := 1; while s <= 45 do begin s := s + 4; n := n * 2 end; writeln(n) end. for s in range(-1000, 1000): n = 1 while s <= 45: s = s + 4 n = n * 2 if n == 256: print(s) #include using namespace std; int main(){ int s, n, i; for (i=-1000;i< 1000;i++){ s = i; n = 1; while (s <= 45){ s += 4; n *= 2; } if (n == 256) cout << i << endl; } return 0; } var s, n, i: i nteger ; begin for i:=- 1000 to 1000 do begin s := i; n := 1 ; while s <= 45 do begin s := s + 4 ; n := n * 2 end; if n = 256 then writeln(i) end; end. s = int(input()) n = 1 while s <= 45: s = s + 4 n = n * 2 print( n ) vk.com/99ballov_inf vk.com/99ballov_infaa Маша составляет буквенные коды из букв ВУАЛЬ. Каждую букву нужно использовать ровно 1 раз, при этом код буква Ь не может стоять на первом месте и перед гласной. Сколько различных кодов может составить Маша? n=0 s=’вуаль’ for a in s[:4]: for b in s: for c in s: for d in s: for e in s: st=a+b+c+d+e for x in s: if st.count(x)!=1: break else: if st.count(‘ьу’)==0 and st.count(‘ьа’)==0: n+=1 print(n) vk.com/99ballov_inf vk.com/99ballov_infaa Дана программа для исполнителя Редактор: НАЧАЛО ПОКА нашлось (2222) ИЛИ нашлось (8888) ЕСЛИ нашлось (2222) ТО заменить (2222, 88) ИНАЧЕ заменить (8888, 22) КОНЕЦ ЕСЛИ КОНЕЦ ПОКА КОНЕЦ Какая строка получится в результате применения приведённой программы к строке, состоящей из 70 идущих подряд цифр 8? В ответе запишите полученную строку var s := StringOfChar(‘8’, 70); var p2 := Pos(‘2222’,s); var p8 := Pos(‘8888’,s); while (p2 > 0) or (p8 > 0) do begin if p2 > 0 then begin Delete( s, p2, 4 ); Insert( ‘88’, s, p2 ); end else begin Delete( s, p8, 4 ); Insert( ‘22’, s, p8 ); end; p2 := Pos(‘2222’,s); p8 := Pos(‘8888’,s); end; write(s); end. #include using namespace std; int main(){ string s(70, ‘8’ ); cout << s << endl; int p2 = s.find( ‘‘2222‘‘ ); int p8 = s.find( ‘‘8888‘‘ ); while (p2 != string ::npos or p8 != string ::npos) { if (p2 != string ::npos) s.replace(p2, 4, «88»); else s.replace(p8, 4, «22»); p2 = s.find(«2222»); p8 = s.find(«8888»); cout << s << endl; } cout << s; } s = 70*’8’ while «2222» in s or «8888» in s: if «2222» in s: s = s.replace( «2222», «88», 1 ) else: s = s.replace( «8888», «22», 1 ) print(s) vk.com/99ballov_inf vk.com/99ballov_infaa Значение арифметического выражения 497 + 721 – 7 – записали в системесчисле- ния с основанием 7. Сколько цифр 6 содержится в этой записи a: BigInteger; k: int64; begin a := BigInteger.Pow(49, 7) + BigInteger. Pow(7, 21) - 7; k := 0; while (a > 0) do begin if (a mod 7 = 6) then k := k + 1; a := a div 7; end; writeln(k); end. x = 49**7 + 7**21 - 7 count6 = 0 while x: if x % 7 == 6: count6 += 1 x //= 7 print( count6 ) vk.com/99ballov_inf vk.com/99ballov_infaa Решите уравнение Ответ запишите в троичной системе счисления. Основание системы счисления указывать ненужно x = i break x3 = ‘’ while x > 0: x3 += str(x%3) x //= 3 x3 = x3[::-1] print(x3) var x ,i: Integer ; b,a,c: real ; x3 : string ; Begin a := 1 * 7 ** 2 + 0 + 1 ; c := a - 1 ; for i := 3 to 99 do begin b := 1 *i** 2 + 2 *i + 1 ; if b = c then begin x := i; break; end; end; while x > 0 do begin x3 += inttostr(x mod 3 ); x := x div 3 ; end; for i:=length(x3) downto 1 do write(x3[i]); End. vk.com/99ballov_inf vk.com/99ballov_infaa Обозначим через m&n поразрядную конъюнкцию неотрицательных целых чисел m и n. Так, например, 14&5 = 11102&01012 = 01002 = 4. Для какого наименьшего неотрицательного целого числа А формула x&25 ≠ 0 → (x&17 = 0 → А ≠ тождественно истинна (те. принимает значение 1 при любом неотрицательном целом значении переменной х A, x: integer; OK : Boolean; function PK(x, D: integer): boolean; begin PK := (x and D = 0); end; function F(x, A: integer): boolean; begin F := (PK(x, 25) or not(PK(x, 17)) or not(PK(x, A))); end; Begin For A:= 1 to 100 do begin OK := True; For x:= 1 to 10000 do if F(x, A) = False then begin OK := False; break; end; if OK = True then writeln(A); end; end. def PK(x, D): return x & D == 0 def F(x, A): return PK(x, 25) or not(PK(x, 17)) or not(PK(x, A)) for A in range(100): OK = True for x in range(10000): if not(F(x, A)): OK = False break if OK: print(A) vk.com/99ballov_inf vk.com/99ballov_infaa Укажите наибольшее целое значение А, при котором выражение - x ≠ 5) v (A < 2x + y) v (A < y + истинно для любых целых положительных значений x и y. 2 3 var x,A,y,i: integer; OK : boolean; function F( x, y, A : integer):Boolean; begin F := (y - x <> 5) or (A < 2*x*x*x + y) or (A < y*y + 16) end; Begin for A := 1 to 100 do begin OK := True; for x:=1 to 1000 do for y:=1 to 1000 do if not F(x,y,A) then begin OK := False; break end; if (OK=True) then writeln(A); end; end. def f( x, y, A ): return (y - x != 5) or (A < 2*x**3 + y) or (A < y**2 + 16) for A in range(1,100): OK = True for x in range(1,1000): for y in range(1,1000): if not f(x, y, A): OK = False break if OK: print( A ) vk.com/99ballov_inf vk.com/99ballov_infaa Обозначим через ДЕЛ утверждение натуральное число n делится без остатка на натуральное число m». Для какого наибольшего натурального числа А формула ¬ДЕЛ(x,А)→(ДЕЛ(x,6)→ ¬ДЕЛ(x,9)) тождественно истинна (то есть принимает значение 1 при любом натуральном значении переменной х Var A, x: integer; OK : Boolean; function DEL(x, D: integer): boolean; begin DEL := x mod D = 0; end; function F(x, A: integer): boolean; begin F := DEL(x, A) or not(DEL(x, 6)) or not(DEL(x, 9)); end; Begin For A:= 1 to 1000 do begin OK := True; For x:= 1 to 1000 do if F(x, A) = False then begin OK := False; break; end; if OK = True then writeln(A); end; end. def Del( x, D ): return x % D == 0 def f( x, A ): return (Del(x,A)) or (not Del(x,6) or not Del(x,9)) for A in range(1,1000): OK = True for x in range(1,1000): if not f(x,A): OK = False break if OK: print( A ) vk.com/99ballov_inf vk.com/99ballov_infaa На числовой прямой даны два отрезка P = [5, 30] и Q = [14, 23]. Укажите наибольшую возможную длину промежутка A, для которого формула P) (x Q)) → ¬(x тождественно истинна, то есть принимает значение 1 при любом значении переменной х x,An,Ak,i,min : integer; OK : boolean; function F( x, An, Ak : integer):Boolean; begin F := not((x >= 130) and (x <= 171)) or not((x >= 150) and (x <= 180)) or ((x >= An) and (x <= Ak)); end; Begin min := 200; for An := 100 to 199 do for Ak:= An+1 to 200 do begin OK := True; for x:=1 to 1000 do if not F(x,An,Ak) then begin OK := False; break end; if (OK=True) and (Ak - An < min) then min := Ak - An; end; writeln(min+1); end. def f( x, An, Ak ): return not(130 <= x <= 171) or not(150 <= x <= 185)\ or (An <= x <= Ak) min = 200 for An in range(100,199): for Ak in range(An+1,200): OK = True for x in range(1,1000): if not f(x,An,Ak): OK = False break if OK and Ak - An < min: min = Ak - An print(min+1) vk.com/99ballov_inf vk.com/99ballov_infaa Определите, сколько символов * выведет эта процедура при вызове F(22): Для выполнения задания можно также написать программу или воспользоваться редактором электронных таблиц. Python Паскаль C++ def F( n ): print(‘*’) if n >= 1: print(‘*’) F(n-1) F(n-2) F(n-3) procedure F( n: integer ); begin write(‘*’); if n >= 1 then begin write(‘*’); F(n-1); F(n-2); F(n-3); end; end; void F( int n ) { cout << ‘*’; if( n >= 1 ) { cout << ‘*’; F(n-1); F(n-2); F(n-3); } } cnt = 0 def F( n ): global cnt cnt += 1 if n >= 1: cnt += 1 F(n-1) F(n-2) F(n-3) F(22) print(cnt) #include using namespace std; int cnt = 0; void F( int n ){ cnt++; if( n >= 1 ) { cnt++; F(n-1); F(n-2); F(n-3); } } int main(){ F(22); cout << cnt; } var cnt: integer ; procedure F( n: integer ); begin inc(cnt); if n >= 1 then begin inc(cnt); F(n- 1 ); F(n- 2 ); F(n- 3 ); end; end; begin cnt := 0 ; F( 22 ); writeln(cnt); end. vk.com/99ballov_inf vk.com/99ballov_infaa Алгоритм вычисления функции F(n) задан следующими соотношениями) = 1 при n = 1 F(n) = n + F(n–1), если n чётно, F(n) = 2· F(n–2), если n > 1 и n нечётно. Чему равно значение функции F(26)? def F(n): if n == 1: return 1 if n % 2 == 0: return n + F(n-1) else: return 2 * F(n-2) print( F(26) ) #include using namespace std; int F( int n ){ if( n == 1 ) return 1; if( n % 2 == 0 ) return n + F(n-1); else return 2 * F(n-2); } int main(){ cout << F(26); } function F( n: integer ): integer ; begin if n = 1 then begin F := 1 ; Exit ; end; if n mod 2 = 0 then F := n + F(n- 1 ) else F := 2 * F(n- 2 ); end; begin writeln( F( 26 ) ) end. vk.com/99ballov_inf vk.com/99ballov_infaa Рассматривается множество целых чисел, принадлежащих числовому отрезку [6391; 8185], которые делятся на 11 или 17 и не делятся на 2, 13, 14, 34. Найдите количество таких чисел и минимальное из них. В ответе запишите два целых числа без пробелов и других дополнительных символов сначала количество, затем минимальное число. Для выполнения этого задания можно написать программу или воспользоваться редактором электронных таблиц count, min, i: integer ; begin min := 8185 ; count := 0 ; for i := 6391 to 8185 do begin if (i mod 11 = 0 ) or (i mod 17 = 0 ) then if i mod 2 <> 0 then if i mod 13 <> 0 then if i mod 14 <> 0 then if i mod 34 <> 0 then begin count := count + 1 ; if i < min then min := i; end; end; writeln(count, min); end. #include using namespace std; int main() { int min=8185,cnt=0,i; for (i = 6391; i <= 8185; i++) { if ((i % 11 == 0 || i % 17 == 0) && (i % 2 != 0 && i % 13 != 0 && i % 14 != 0 && i % 34 != 0)) { cnt++; if (i < min) min = i; } } cout << cnt << min; return 0; } min,cnt = 8185, 0 for i in range (6391, 8186): if ((i % 17 == 0) or (i % 11 == 0)) and ((i % 2 != 0) and (i % 13 != 0) and (i % 14 != 0) and (i % 34 != 0)): cnt += 1 if i < min: min = i print(cnt, min, sep=’’) vk.com/99ballov_inf vk.com/99ballov_infaa Два игрока, Петя и Ваня, играют в следующую игру. Перед игроками лежат две кучи камней. Игроки ходят по очереди, первый ход делает Петя. За один ход игрок может добавить в одну из куч (по своему выбору) один камень или увеличить количество камней в куче в два раза Игра завершается в тот момент, когда суммарное количество камней в кучах становится не менее 77. Победителем считается игрок, сделавший последний ход, те. первым получивший такую позицию, при которой в кучах будет 77 или больше камней. В начальный момент впервой куче было семь камней, во второй куче – S камней 1 ≤ S ≤ Задание 19. Известно, что Ваня выиграл своим первым ходом после неудачного первого хода Пети. Укажите минимальное значение S, когда такая ситуация воз- можна. Задание 20. Найдите два таких значения S, при которых у Пети есть выигрышная стратегия, причём одновременно выполняются два условия − Петя не может выиграть за один ход − Петя может выиграть своим вторым ходом независимо оттого, как будет ходить Ваня.Найденные значения запишите в ответе в порядке возраста- ния. Задание 21. Найдите минимальное значение S, при котором одновременно выполняются два условия у Вани есть выигрышная стратегия, позволяющая ему выиграть первым или вторым ходом при любой игре Пети у Вани нет стратегии, которая позволит ему гарантированно выиграть первым ходом. end = 77 lose = [] output = [] for i in range(2*end): output.append([0]*2*end) for x in range(end-1,0,-1): for y in range(end-x-1,0,-1): follow = [ output[x+1][y], output[2*x][y], output[x][y+1], output[x][2*y]] lose.clear() for i in range(4): if follow[i] <= 0: lose.append(follow[i]) if lose: output[x][y] = -max(lose) + 1 else: output[x][y] = -max(follow) N1 = 7 for S in range(end-N1-1,0,-1): print(S, output[N1][S]) vk.com/99ballov_inf vk.com/99ballov_infaa Ниже на четырех языках программирования записан алгоритм. Получив на вход число x, этот алгоритм печатает два числа L и M. Укажите наибольшее число x, при вводе которого алгоритм печатает сначала 4, а потом 5. #include using namespace std; int main ( ) { int x, L, M, Q; cin >>x; Q = 9; L = 0; while (x >= Q) { L = L + 1; x = x - Q; } M = x; if (M < L) { M = L; L = x; } cout < } алг нач цель x, L, M, Q ввод x Q := 9 L := 0 нц пока x >= Q L := L + 1 x := x - Q кц M := x если M < L то M := L L := x все вывод L, мс, кон x = int (input ( ) ) Q = 9 L = 0 while x >= Q; L = L + 1; x = x - Q; M = x; if M < L; M = L; L = x; print (L) print (M) var x, L, M, Q: integer; begin readln (x) Q := 9; L := 0; while x >= Q do begin L := L + 1; x := x - Q; end; M := x; if M < L then begin M := L; L := x; end; writeln(L); writeln(M); end. С++ Алгоритмический язык Python Паскаль vk.com/99ballov_inf vk.com/99ballov_infaa instagram.com/danil99ballov/ youtube.com/channel/UCMaXzRQ7_TpfVWgbEXQOH7w var x, L, M, Q, i: integer ; begin for i:= 1 to 1000 do begin x := i; Q := 9 ; L := 0 ; while x >= Q do begin L := L + 1; x := x - Q; end; M := x; if M < L then begin M := L; L := x; end; if (L = 4 ) and (M = 5 ) then writeln(i); end; end. for i in range(1,1001): x = i Q = 9 L = 0 while x >= Q: L = L + 1 x = x - Q M = x if M < L: M = L L = x if L == 4 and M == 5: print(i) #include using namespace std; int main(){ int x, L, M, Q; for( int i = 1; i <= 1000; i ++ ) { x = i; Q = 9; L = 0; while (x >= Q) { L = L + 1; x = x - Q; } M = x; if (M < L) { M = L; L = x; } if( L == 4 and M == 5 ) cout << i << endl; } } vk.com/99ballov_inf vk.com/99ballov_infaa Исполнитель М преобразует число на экране. У исполнителя есть три команды, которым присвоены номера. Прибавить 1 2. Прибавить 2 3. Умножить на Первая команда увеличивает число на экране на 1, вторая – увеличивает его на 2, а третья – умножает его на 3. Программа для исполнителя М – это последовательность команд. Сколько существует программ, для которых при исходном числе 2 результатом является число 12 и при этом траектория вычислений содержит числа 8 и 10? #include using namespace std; int numProg( int start, int x ) { int K; if( x < start ) return 0; if( x == start ) return 1; K = numProg( start, x-1 )+ numProg( start, x-2 ); if( x % 3 == 0 ) K += numProg( start, x / 3 ); return K; } int main(){ cout << numProg(2,8)* numProg(8,12) * numProg(10,12);} def numProg( start, x ): if x < start: return 0 if x == start: return 1 K = numProg( start, x-2 ) K += numProg( start, x-1 ) if x % 3 == 0: K += numProg( start, x//3 ) return K print(numProg(2,8)*numProg(8,10)*numProg(10,12)) function numProg( start, x: integer ): integer; var K: integer; begin if x < start then numProg := 0 else if x = start then numProg := 1 else begin K:=numProg(start,x-1)+numProg(start,x-2); if x mod 3 = 0 then K := K + numProg( start, x div 3 ); numProg := K; end; end; begin writeln( numProg(2,8)*numProg(8,10) *numProg(10,12) ); end. |