Войти
или
Зарегистрироваться
Курсы
Учебник
Учебник 2.0
ОГЭ/ЕГЭ
Олимпиады
Рубрикатор
Компилятор
Онлайн Компилятор
Компилятор Python (lite)
Редактор HTML Code
Статья Автор:
Бабинок Михаил
По одному делу за раз...
#Бинарный поиск def binar(akr, key): midd = 0 left = 0 right = len(akr) - 1 while right - left > 1: midd = (left + right)//2 if key < akr[midd]: right = midd else: left = midd if akr[right] == key: return right else: return -1
×
#Иммитация for-а №1 # Процедура LoopImitation() с двумя параметрами # Первый параметр – счетчик шагов, # второй параметр – общее количество шагов def LoopImitation(i, n): print("Hello N", i) # Оператор, который необходимо выполнять (повторять) # при любом значении i if i < n: # Пока счетчик цикла не станет равным значению n, LoopImitation(i + 1, n) # вызываем еще раз эту же процедуру, # с параметром i+1 (переход к следующему значению i) #Иммитация for-а №2 def Factorial(n): if n > 1: return n * Factorial(n - 1) else: return 1 x = 1 for i in range(1, n + 1): x = x * i
×
#Сортировка подсчётом n = int(input()) akr = list(map(int,input().split())) cnt = [0]*(2*100000+1) for y in range(n): num = akr[y] cnt[num + 100000] += 1 for num in range(len(cnt)): for j in range(cnt[num]): print(num - 100000,end = ' ') #Задача про школы и учеников ''' На вход программе подаются сведения о номерах школ учащихся, участвовавших в олимпиаде. В первой строке сообщается количество учащихся N, каждая из следующих N строк имеет формат: <Фамилия> <Инициалы> <номер школы>, где <Фамилия> – строка, состоящая не более чем из 20 символов, <Инициалы> – строка, состоящая из 4-х символов (буква, точка, буква, точка), <номер школы> – не более чем двузначный номер. <Фамилия> и <Инициалы>, а также <Инициалы> и <номер школы> разделены одним пробелом. Пример входной строки: Иванов П.С. 57 Требуется написать как можно более эффективную программу , которая будет выводить на экран информацию, из какой школы было меньше всего участников (таких школ может быть несколько). При этом необходимо вывести информацию только по школам, пославшим хотя бы одного участника. Если таких школ несколько, то список выводить в столбик. Следует учитывать, что N>=1000 ''' n = int(input()) cnt = [0]*100 m = 10**5 for i in range(n): a = input().split() x = int(a[2]) cnt[x] += 1 for i in cnt: if m > i and i != 0: m = i for i in range(len(cnt)): if cnt[i] == m: print(i) #Задача про телефоны сотрудников ''' На вход программе подаются сведения о телефонах всех сотрудников некоторого учреждения. В первой строке сообщается количество сотрудников N, каждая из следующих N строк имеет следующий формат: <Фамилия> <Инициалы> <телефон> где <Фамилия> – строка, состоящая не более чем из 20 символов, <Инициалы> - строка, состоящая не более чем из 4-х символов (буква, точка, буква, точка), <телефон> – семизначный номер, 3-я и 4, я, а также 5-я и 6-я цифры которого разделены символом «–». <Фамилия> и <Инициалы>, а также <Инициалы> и <телефон> разделены одним пробелом. Пример входной строки: Иванов П.С. 555-66-77 Сотрудники одного подразделения имеют один и тот же номер телефона. Номера телефонов в учреждении отличаются только двумя последними цифрами. Требуется написать как можно более эффективную программу, которая будет выводить на экран информацию, сколько в среднем сотрудников работает в одном подразделении данного учреждения. Ответ выводить с точностью 6 знаков после запятой. ''' n = int(input()) cnt = [] for _ in range(n): a = input().split('-') x = int(a[2]) if x not in cnt: cnt.append(x) print(round(n/len(cnt), 6))
×
#Матрицы #Ввод: akr = [] for i in range(n): row = list(map(int, input().split())) akr.append(row) #Вывод: for i in range(n): print(*akr[i]) for i in range(n): for j in range(m): print(akr[i][j], end = ' ') print() #Побочная диагональ: j = n - 1 - i #Главная диагональ: i = j #Ввод списком: akr = [list(map(int, input().split())) for i in range(n)] ''' Дано число n. Создайте массив размером nхn и заполните его по следующему правилу: Числа на диагонали, идущей из правого верхнего в левый нижний угол, равны 1. Числа, стоящие выше этой диагонали, равны 0. Числа, стоящие ниже этой диагонали, равны 2. Полученный массив выведите на экран. Числа в строке разделяйте одним пробелом. Формат входных данных На вход подается одно число n (n<=100). Формат выходных данных Выведите на экран, заполненную матрицу. ''' n = int(input()) kvadr = [] will = 0 q = 1 for i in range(n): kvadr.append([0]*n) for i in range(n): for j in range(n): kvadr[i][n-1-i] = 1 for i in range(n): for j in range(n): if j > (n - i - 1): kvadr[i][j] = 2 for v in range(n): for w in range(n): print(kvadr[v][w], end = ' ') print() #Перестановка диагоналей n = int(input()) akr = [list(map(int,input().split())) for i in range(n)] for i in range(n): akr[i][i], akr[n - 1 - i][i] = akr[n - 1 - i][i], akr[i][i] for y in akr: print(*y) #Поворот на 90 градусов (по час. стрелке) n = int(input()) akr = [list(map(int, input().split())) for i in range(n)] novus = [] for i in range(n): focus = [] for y in range(len(akr[i])): focus = focus + [akr[y][i]] novus = novus + [list(reversed(focus))] for i in range(n): for j in range(n): print(novus[y][i], end = ' ') print() ''' Дан квадратный двумерный массив размером nхn и число k. Выведите элементы k-й по счету диагонали ниже главной диагонали (т.е. если k=1, то нужно вывести элементы первой диагонали, лежащей ниже главной, если k=2, то второй диагонали и т.д.). Значение k может быть отрицательным, например, если k=−1, то нужно вывести значение первой диагонали, лежащей выше главной. Если k=0, то нужно вывести элементы главной диагонали. Формат входных данных Программа получает на вход число n (n <= 10), затем идут элементы массива n строк по n символов в каждой строке, затем с новой строки, число k(все элементы и значениеkпо модулю не больше 100). Формат выходных данных Элементы k-й по счету диагонали ниже главной диагонали, через пробел, в одной строке. ''' n = int(input()) akr =[list(map(int,input().split())) for i in range(n)] k = int(input()) for i in range(n-abs(k)): if k <= 0: print(akr[i][abs(k)+i], end =' ') else: print(akr[abs(k)+i][i], end =' ') ''' Дано число n и двумерный массив размером nхn. Проверьте, является ли этот двумерный массив симметричным относительно главной диагонали. Выведите слово “YES”, если двумерный массив симметричный, и слово “NO” - в противном случае. Формат входных данных В первой строке задается число n - размер двумерного массива (n <= 10). Далее идут n строк по n чисел в каждой - элементы двумерного массива. Формат выходных данных Выведите на экран слово "YES", если массив симметричен, или "NO" - в противном случае ''' n = int(input()) kvadr = [] for y in range(n): row = list(map(int,input().split())) kvadr.append(row) oculus = 'YES' for i in range(n): for j in range(n): if i > j: if kvadr[i][j] != kvadr[j][i]: oculus = 'NO' print(oculus)
×
#Разбор Демоверсии # Задание 1 вариант 1 n = int(input()) a = [] # Вводим матрицу for i in range(n): a.append(list(map(int, input().split()))) # Меняем диагонали for i in range(n): a[i][i], a[n-i-1][i] = a[n-i-1][i], a[i][i] for i in range(n): print(*a[i]) # Задание 1 вариант 2 n = int(input()) m = int(input()) a = [] # Вводим матрицу for i in range(n): a.append(list(map(int, input().split()))) # Ищем два максимума mx0 = mx1 = -10 ** 10 j0 = j1 = i0 = i1 = 0 for i in range(n): for j in range(m): if a[i][j] > mx0: mx1, i1, j1 = mx0, i0, j0 mx0, i0, j0 = a[i][j], i, j elif a[i][j] > mx1: mx1, i1, j1 = a[i][j], i, j # Меняем местами элементы a[i0][j0], a[i1][j1] = a[i1][j1], a[i0][j0] for i in range(n): print(*a[i]) # Задание 2 вариант 1 # Программа должна использовать рекурсию, т.к. циклы запрещены def rec(s, n): if n < 1: print(s) return rec(s + '0', n - 1) rec(s + '1', n - 1) rec(s + '2', n - 1) n = int(input()) rec('', n) # Задание 2 вариант 2 # Программа должна использовать рекурсию, т.к. циклы запрещены def rec(s, n): if n < 1: print(s) return if s == '' or s[-1] != 'K': rec(s + 'K', n - 1) if s == '' or s[-1] != 'L': rec(s + 'L', n - 1) if s == '' or s[-1] != 'M': rec(s + 'M', n - 1) if s == '' or s[-1] != 'N': rec(s + 'N', n - 1) n = int(input()) rec('', n) # Задание 3 вариант 1 # Программа должна водить данные из файла. Если в файлe есть данные на кириллице, # нужно использовать encoding file = open('name.txt', encoding = 'utf-8') s = file.read() file.close() counter = [0] * 1200 alf = 'ячсмитьбюэждлорпавыфйцукенгшщзхъё' # используем список счетчиков. создаем список повторов каждой буквы в нижнем регистре for i in range(len(s)): if s[i-1].lower() == 'т' and s[i].lower() in alf: counter[ord(s[i].lower())] += 1 m = max(counter) for i in range(1200): if counter[i] == m: print(chr(i)) break # Задание 3 вариант 2 # Программа должна вводить данные из файла. Если в файлe есть данные на кириллице, # нужно использовать encoding file = open('name.txt', encoding = 'utf-8') s = file.read() # можно использовать словарь d = dict() alf_ = '1234567890)(/*-+,.;:!?%$#@&^/{}[]№' #не буквы for c in s: for symbol in alf_: c = c.replace(symbol, ' ') # все, кроме букв, меняем на пробел while ' ' in c: c = c.replace(' ', ' ') # убираем двойные пробелы s = s.lower().split() # разбиваем на списoк слов for word in s: # можно исп-ть функцию get для работы со словарем d[word] = d.get(word, 0) + 1 # но можно не исп-ть get. другой вариант решения: # if word in d: # d[word] += 1 # else: # d[word] = 1 # идем по отсортированному словарю по парам ключ-значение и выводим for key, value in sorted(d.items()): if value == 2: print(key) # или идем идем по отсортированному словарю по ключам и выводим for key in sorted(d.keys()): if d[key] == 2: print(key) # Задание 4 вариант 1 # Программа должна использовать алгоритм бин.поиска, иначе не зайдет по времени def bin_search(arr, x, n): r = n l = -1 while r - l > 1: m = (r + l) // 2 if arr[m] >= x: r = m else: l = m return r n = int(input()) a = list(map(int, input().split())) x = int(input()) a.sort() if x < a[0]: print(a[0]) elif x > a[-1]: print(a[-1]) else: ans = bin_search(a, x, n) if a[ans] - x < x - a[ans-1]: print(a[ans]) else: print(a[ans-1]) # Задание 4 вариант 2 # Программа должна использовать алгоритм бин.поиска, иначе не зайдет по времени def bin_search(arr, x, n): r = n l = -1 while r - l > 1: m = (r + l) // 2 if arr[m] >= x: r = m else: l = m return r n, k = map(int, input().split()) arr1 = list(map(int, input().split())) arr2 = list(map(int, input().split())) for number in arr2: if number < arr1[0] or number > arr1[-1]: print('NO') else: if bin_search(a, x, n): print('YES') else: print('NO') # Задание 5 вариант 1 # Программа должна использовать сортировку по условию s = input() dig = s.split() dig.sort(key = lambda x: x.count('0')) print(*dig) # Задание 5 вариант 2 # Программа должна использовать сортировку по условию n = int(input()) list_student = [] for i in range(n): s = input().split() list_student.append([s[0], float(s[2].replace(',', '.'))]) list_student.sort(key = lambda x: -x[1]) for i in range(n): print(list_student[i][0])
×
Чтобы оставить комментарий нужна авторизация
Печать