Шпора. шпора 2022 УМСКУЛ. Программа решения конкретного 5го задания
Скачать 0.51 Mb.
|
Задание №2 for x in 0,1: for y in 0, 1: for z in 0, 1: for w in 0, 1: if (здесь должны быть функция из задания): print(x,y,z,w) В ПРОГЕ: or and <= == not() В ЗАДАЧАХ ∨ ∧ → ≡ ¯ Задание №5 программа решения конкретного 5-го задания, реализован вариант с дублированием цифры и добавлением остатка от деления суммы цифр на 2 вместо 97 - пишите нужное вам значение def task(N): n_bin = bin(N)[2:] n_bin = n_bin + n_bin[-1] n_bin += str(sum([int(i) for i in n_bin]) % 2) return int(n_bin,2) for i in range(1, 1000): if task(i) > 97: print(task(i)) break Задание №6 перебор for i in range(1,1000): s = i n = 0 while s ≤ 375: s = s + 5 n = n + 2 if n == 64: print(i) Задание №22 перебор Если выходят числа очень близкие к концу диапазона(1 или 1000, увеличьте диапазон) for i in range(1,1000): x = i x0 = x N = 0 while x > 0: d = x % 3 N = 10 * N + d x = x // 3 N += x0 if (N) ≥ (100000): print(i) Если выходят числа очень близкие к концу диапазона(1 или 1000, увеличьте диапазон) Задание №7 ФОРМУЛЫ V (изобр) =N (количество пикселей) * i (глубина цвета=обьем пикселя) V (размер файла) =N (кол-во волн) * F (частоту) * B (разрешения) * t (время) кол-во цветов в палитре = 2 i(глубина цвета=обьем пикселя) кол-во уровней дискретизации = 2 B(разрешение) 1 БАЙТ = 8 БИТ 1 Кбайт = 2 10 байт = 2 13 бит 1 Мбайт = 2 10 Кбайт = 2 20 байт = 2 23 бит Когда переводим в биты - умножаем Когда переводим из бит - делим Задание №8 C повторами from itertools import product p = product('ШКОЛА', repeat=3) n = 0 for x in p: if x.count('К') == 1: n += 1 print(n) без повторов - перестановки from itertools import permutations p = permutations('ШКОЛА', r=3) n = 0 for x in p: if x.count('К') == 1: n += 1 print(n) ЭКСЕЛЬ =ЕСЛИ(A1 ЕСЛИ(Условие; значение если верно; если неверно) =ОСТАТ(L8;2) ОСТАТ(число; делитель) =МАКС(B2:D8) МАКС(число области1:число области2) =СРЗНАЧ(B2:D8) СРЗНЧ(число области1:число области2) =СУММ(B2:D8) СУММ(число области1:число области2) =МИН(B2:D8) МИН(число области1:число области2) Задание №12 b = "1"*82 while "11111" in b or "888" in b: if "11111" in b: b = b.replace("11111","88",1) elif "888" in b: b = b.replace("888", "8", 1) print(b) "888" in b - проверка на наличие в строке b = b.replace("888", "8", 1) - замена в строке b = "1"*82 - создание строки * - повторяет строку столько раз, на сколько ее умножить Задание №14 c = 0 s = 7*512**120 - 6*64**100 - 255 while s > 0 : if s % 8 == 0: c+=1 s = s // 8 print(c) s % 8 - возвращает последнюю цифру числа в 8-ой сс s = s // 8 - удаляет последнюю цифру числа в 8-ой сс Если нужна другая сс, просто везде поменяйте 8 на нужную Задание №15 - ДЕЛ def Del(x, A): return x % A == 0 for A in range(1, 1000): podoschelA = True for x in range(1, 1000): if (ваша функция) == False: podoschelA = False break if podoschelA == True: print(A) Задание №15 - КОНЬЮНКЦИЯ Задание №15 - ГРАФИКИ for A in range(1, 1000): podoschelA = True for x in range(0, 1000): if (ваша функция) == False: podoschelA = False break if podoschelA == True: print(A) for A in range(1,1000): podoschelA = True for x in range(1,1000): for y in range(1,1000): if (ваша функция) == False: podoschelA = False break if podoschelA == False: break if podoschelA == True: print(A) НАИБОЛЬШИЙ(число области1:число области2; номер) =НАИБОЛЬШИЙ(B2:D8;3) - (вернет 3й по большевизне) СПИСКИ a = [] - создание списка a.append(n) - добавление элемента n в список len(а) - длина списка max(a) - максимальный элемент min(a) - минимальный элемент sum(a) - сумма списка a.sort() - сортировка списка в порядке возрастания a.sort(reverse=True) - сортировка списка в порядке убывания a.count(n) - количество n в списке СТРОКИ a = ‘’ - создание строки len(а) - длина строки a.count(«n») - количество n в строки «hi» in a - проверка наличия подстроки в строке a.split(«AB») - разделение на список строк по AB «».join(b) - объединение списка в строку a = a.replace("88", "8", 1) - замена «A» < «B» - строки можно сравнивать в алфавитно порядке Задание №15 - отрезки - наиб Q = list(range(12, 33)) P = list(range(4, 14)) A = list(range(1, 1000)) for x in range(1, 1000): if not(((x in A) ≤ (x in P)) or (x in Q)): A.remove(x) print(A) Задание №15 - отрезки - наим Q = list(range(12, 33)) P = list(range(4, 14)) A = [] for x in range(1, 1000): if not(((x in A) ≤ (x in P)) or (x in Q)): A.append(x) print(A) ЗАДАНИЕ №18 ПОИСК МАКС = ИЗНАЧАЛЬНОЕ ЗНАЧЕНИЕ + МАКС(ЗНАЧЕНИЕ ИЗ ТАБЛИЦЫ СУММ СПРАВА, ЗНАЧЕНИЕ ИЗ ТАБЛИЦЫ СУММ СНИЗУ) ПОИСК МИН = ИЗНАЧАЛЬНОЕ ЗНАЧЕНИЕ + МИН(ЗНАЧЕНИЕ ИЗ ТАБЛИЦЫ СУММ СПРАВА, ЗНАЧЕНИЕ ИЗ ТАБЛИЦЫ СУММ СНИЗУ) Случай, когда робот ходит вниз и вправо Удаляйте варианты, которые ведут в стенки Задание №25 Задание №25 Задание №27 на двойки мин сумма Задание №27 на двойки макс сумма Задание №27 на тройки макс сумма + одно число Задача на поиск сумм наиб и наим делителей count = 0 n = 452022 while count != 5: F = 0 for i in range(2, int(n**(1/2)+1)): if n // i == i: continue if n % i == 0: F = n//i + i break if F % 7 == 3: print(n, F) count+=1 n+=1 Функция поиска простых чисел Задание №25 def isProst(x): prost = True for i in range(2, int(x**0.5)+1): if x % i == 0: prost = False return prost В 25 номере идем до корня включительно - Но проверяем отдельно корень, нельзя его добавлять дважды. count = 0 n = 452022 while count != 5: F = 0 for i in range(2, int(n**(1/2)+1)): if n % i == 0: If isProst(n//i) == True: print(n, n//i) count+=1 break n+=1 Задача поиска простого наиб делителя Задание №25 Если n - это число i - это делитель n//i - противоположный делитель Задача поиска суммы простых делителей count = 0 n = 452022 while count != 5: S = 0 for i in range(2, int(n**(1/2)+1)): if i*i == n: if isProst(i) == True: S += i elif n % i == 0: if isProst(i) == True: S += i if isProst(n//i) == True: S += n//i if S % 7 == 2: print(n, S) count+=1 n+=1 Задание №27 на наиб сумму подпоследовательности кратную 101 Задание №27 на тройки макс сумма + два числа f = open("27.txt") n = int(f.readline()) sum_final = 0 min_razn = 100000001 for i in range(n): a,b,c = map(int, f.readline().split()) s = [a,b,c] s.sort() sum_final += s[2] + s[1] if (s[2]-s[0]) Первый принт - мин затраты Вторй принт - какой бачок f = open("27-01b.txt") s, cnt = 0,0 n,k = map(int, f.readline().split()) res = [] maxs = [0] + [10000001]*(k-1) for i in range(1,n+1): x = int(f.readline()) s += x if x < 0: x0 = abs(x) while x0 ≥ 7: x0 //= 7 if x0 == 5: cnt += 1 if maxs[cnt % k] != 10000001: res.append(s - maxs[cnt % k]) if s < maxs[cnt % k]: maxs[cnt % k] = s print(max(res)) f = open("27-B_n.txt") n = int(f.readline()) a = [] for s in f: a.append(int(s)) ans = [] ans1, r, l = 0, 0, 0 for i in range(1, n//2): ans1 += (a[i]*i + a[-i]*i) r += a[i] l += a[-i] ans1 += a[n//2]*(n//2) ans.append(ans1) for i in range(1, n): ans.append(ans[i-1] - r + l + a[i-1] - a[(i+n//2 - 1)%n]) r = r - a[i] + a[(i+n//2 - 1)%n] l = l + a[i-1] - a[(i+n//2)%n] print(min(ans)) print(ans.index(min(ans))+1) Задание №27 на наиб сумму подпоследовательности c кол-вом особых чисел(в 7ой начинаются на 5) кратным k Задание №27 на кол-во сумм подпоследовательностей кратных 999 f = open("27_01_A.txt") n = int(f.readline()) a = [] result, current = 0, 0 k = 999 sum_ost = [0]*(k) for i in range(len(a)): x = int(f.readline()) current += x if current % k == 0: result += 1 if sum_ost[current % k] != 10000001: result += sum_ost[current % k] sum_ost[current % k] += 1 print(result) ЗАДАНИЕ №19-21 Шаги +4; *2, победа Задание №23 def rec(start, end): if start < end: return 0 if start == end: return 1 return rec(start-2,end) + rec(start-5,end) print(rec(23,2)) def rec(start, end): if start > end or start == 6: return 0 if start == end: return 1 return rec(start+2,end) + rec(start*2,end) print(rec(2,20)) Здесь команды +2, *2, не проходя через 6 Здесь команды -2, -5 Задание №25 Задание №25 Нечетное число делителей - у числа извлекается корень Пример задачи на 3 делителя a = [] for i in range(108765, 280723+1): b = [] for j in range(1, int(I**(1/2)+1)): if j*j == i: b.append(j) elif i % j == 0: b.append(j) b.append(I//j) if len(b) > 3: break if len(b) == 3: a.append(b) print(a) Пример задачи на маску 123*5 до 1000000 Кратную 42 cnt = 0 for x in range(1235, 123995+1): if x % 42 == 0 and "123" == str(x)[:3] \ and "5" in str(x)[3:]: print(x, x // 42) Пример задачи на маску 12345?7?8 до 10^9 Кратную 42 cnt = 0 for x in range(123450708, 123459708+1): if x % 42 == 0 and "12345" == str(x)[:5] \ and "7" == str(x)[-3] and "8" == str(x)[-1]: print(x, x // 42) Пример задачи на маску 12345*7? до 10^9 Кратную 42 cnt = 0 for x in range(1234570, 123459979+1): if x % 42 == 0 and "12345" == str(x)[:5] \ and "7" == str(x)[-2]: print(x, x // 42) def WIN1(x,S): return (x + 4 + S ≥ 51) or (x*2 + S ≥ 51) or (x + 2*S ≥ 51) def LOSS1(x, S): return (not(WIN1(x, S))) and WIN1(x+4, S) and WIN1(S +4, x) and WIN1(x*2, S) and WIN1(x, S*2) def WIN2(x, S): return (LOSS1(x+4, S) or LOSS1(S +4, x) or LOSS1(x*2, S) or LOSS1(x, S*2)) def LOSS2(x, S): return ((WIN1(x+4, S) or WIN2(x+4, S)) \ and (WIN1(x, S+4) or WIN2(x, S+4)) and (WIN1(x*2, S) or WIN2(x*2, S)) and (WIN1(x, S*2) \ or WIN2(x, S*2)) and (WIN2(x+4, S) or WIN2(S +4, x) or WIN2(x*2, S) or WIN2(x, S*2)) x = 5 for s in range(1, 51): if WIN1(x+4, S) or WIN1(S +4, x) \ or WIN1(x*2, S) or WIN1(x, S*2): print(s) if WIN2(x,s): print(s) if LOSS2(x, s): print(s) Задание №24 Cколько пар идущих подряд AB или AC? f = open("24.txt") s = f.readline() s = s.replace("AC", "AB") for i in range(1, 1000): ss = "AB" * i if ss in s: print(i) Наибольшая строка без YZXZ f = open("24.txt") s = f.readline() a = s.split("YZXZ") print(len(max(a, key=len))+6) #не забудьте проверить индекс строки print(a.index(max(a, key=len))) Задание №17 на доп поиск f = open("17.txt") a = [] min26 = 10000000 for s in f: a.append(int(s)) if int(s) % 26 == 0 and int(s) < min26: min26 = int(s) sum_par = [] for i in range(len(a)-1): if (a[i] % min26 == 0) \ or (a[i+1] % min26 == 0): sum_par.append(a[i] + a[i+1]) print(len(sum_par), max(sum_par)) Задание №26 саженцы театр Задание №24 на разные сосед.символы f = open("26.txt") n = int(f.readline()) a = [] for i in range(n): a.append(list(map(int, f.readline().split()))) a.sort() b = [] for i in range(n-1): if (a[i][0] == a[i+1][0]) \ and (a[i][1] + 18 == a[i+1][1]): b.append([a[i][0], a[i][1]+1]) print(b) f = open("24.txt") m = 1 mm = 1 s = f.readline() for i in range(len(s)-1): if s[i] != s[i+1]: m += 1 mm = max(m, mm) else: m = 1 print(mm) Задание №26 грузы f = open("26.txt") s, n = map(int, f.readline().split()) a = [] for i in range(n): a.append(int(f.readline())) a.sort() b = [] for i in range(n): if sum(b) + a[i] ≤ s: b.append(a[i]) elif sum(b) - b[-1] + a[i] ≤ s: del b[-1] b.append(a[i]) else: break print(len(b), max(b)) Вычитать или добавлять должны на +1 от кол-ва свободных мест |