лаба яп 2 2020
.docx
МИНИСТЕРСТВО НАУКИ И ВЫСШЕГО ОБРАЗОВАНИЯ РОССИЙСКОЙ ФЕДЕРАЦИИ
ФЕДЕРАЛЬНОЕ ГОСУДАРСТВЕННОЕ БЮДЖЕТНОЕ
ОБРАЗОВАТЕЛЬНОЕ УЧРЕЖДЕНИЕ ВЫСШЕГО ОБРАЗОВАНИЯ
«ДОНСКОЙ ГОСУДАРСТВЕННЫЙ ТЕХНИЧЕСКИЙ УНИВЕРСИТЕТ»
(ДГТУ)
Факультет: Информатика и вычислительная техника
Кафедра: Кибербезопасность информационных систем
ПРАКТИЧЕСКАЯ РАБОТА № 2
на тему: «Алгоритмы на массивах, сортировка и поиск»
Выполнил: обучающийся гр. ВКБ33
Егоров Никита Валентинович
Проверил:
Доцент, Савельев Василий Александрович
Ростов-на-Дону
2020
Практическая работа № 2. Алгоритмы на массивах, сортировка и поиск
Цель работы: Изучить алгоритмы на массивах, сортировка и поиск: скользящее окно, два указателя, префиксные суммы, стандартная сортировка и классификация алгоритмов сортировки, линейный, бинарный, тернарный поиск.
Ход работы:
Задание 1. Автомобильные номера.
from itertools import * Number = input() Words = Number[0] + Number[4] + Number[5] Digits = Number[1] + Number[2] + Number[3]
WordsComb = list(set(permutations(Words))) DigitsComb = list(set(permutations(Digits)))
CombLen = len(WordsComb) * len(DigitsComb) print(CombLen)
#print(WordsComb) #print(DigitsComb)
for i in WordsComb: for j in DigitsComb: Num = i[0]+j[0]+j[1]+j[2]+i[1]+i[2] print(Num) |
Задание 2. Субботник.
def hook(ty): h = 0 u = 0 for i in range(len(tyu)): u -= 1 if u < 1 and tyu[i] <= ty: h += 1 u = c if h >= r: return True return False
n, r, c = map(int, input().split()) hs = sorted([int(input()) for line in range(n)]) tyu = [hs[i + c - 1] - hs[i] for i in range(len(hs) - c + 1)]
leg = -1 reg = hs[-1] - hs[0] if r > 1: while leg + 1 != reg: m = (leg + reg) // 2 if hook(m): reg = m else: leg = m print(reg) else: print(min(tyu)) |
Задание 3. Ставки.
import itertools import functools print(*(tuple([[[0]]]) + tuple(*map(lambda data: filter(lambda x: tuple(x[0]) == x[1], map(lambda var: (filter(lambda sta: ((var.index(sta[0]) >= var.index(sta[1])) ^ (var.index(sta[2]) >= var.index(sta[3]))), data[1]), data[1], var + data[2]), data[0])), map(lambda x: (itertools.permutations(set(functools.reduce(lambda x,y: x + y ,x[1]))), x[1], tuple(set(range(1, x[0] + 1)) - set(functools.reduce(lambda x,y: x + y ,x[1])))), map(lambda vvod: (next(vvod), tuple(set(map(lambda y: tuple(y), map(lambda x: map(int, input().split()), range(next(vvod))))))), [map(int, input().split())])))))[-1][-1]) |
Задание 4. Левый и правый двоичный поиск.
import bisect
N, M = map(int,input().split()) list1 = [int(x) for x in input().split()] list2 = [int(x) for x in input().split()]
for x in list2: i = bisect.bisect_left(list1, x) if i >= N: print(0) continue if list1[i] == x: print(i + 1, bisect.bisect(list1, x, i)) else: print(0) |
Задание 5. Суперсумма.
Amount = int(input()) Numbers = []
for Number in range(Amount): n = int(input()) Numbers.append(n)
hash = {}
for Number in Numbers: s = 0 i = 0
if(Number in list(hash.keys())): print(hash[Number]) else: while i < len(Numbers): j = i + 1 while j < len(Numbers): if(Number == Numbers[i] + Numbers[j]): s += 1 #print(Numbers[i]," + ", Numbers[j], " = ", Number) j += 1 i += 1 print(s) hash[Number] = s |
Задание 6. Коровы - в стойла.
n, k = map(int, input().split()) *a, = map(int, input().split()) a.sort() left = 0 right = a[-1] - a[0] + 1 while left < right: mid = (left + right)//2 cows = 1 last = a[0] for cur in a[1:]: if cur - last > mid: cows += 1 last = cur if cows >= k: left = mid+1 else: right = mid print(left) |
Задание 7. Провода.
n, k = map(int, input().split()) length = [] for i in range(n): length.append(int(input()))
l = 1 r = 10000000 + 1
while(l < r): mid = (l + r) // 2 an = 0 for i in range(n): an += length[i] // mid if(an >= k): l = mid + 1 else: r = mid print(l - 1) |
Задание 8. Банковские карты.
hain = input()
counter = {'1':0, '2':0, '3':0, '4':0, '5':0, '6':0, '7':0, '8':0, '9':0, '0':0}
k = 0 for i in chain: t = 1 counter[i] += 1 for j in list(counter.values()): print('t &= j: ', t, '&=', j) t &= bool(j)
#print(list(counter.values()))
if(t): counter = {'1':0, '2':0, '3':0, '4':0, '5':0, '6':0, '7':0, '8':0, '9':0, '0':0} k += 1 print(list(counter.values())) print(k) temp = '' for r in list(counter.keys()): if counter[r] == 0: temp = r break
print(k*10 + int(r)) |
Задание 9. Стильная одежда.
def scan(a,n,b,m): ia=0 ib=0 min=abs(a[0]-b[0]) ma=0 mb=0 while (True): if (ia >= n) | (ib >=m): break if a[ia]==b[ib]: ma=ia mb=ib break if abs(a[ia]-b[ib]) < min: min=abs(a[ia]-b[ib]) ma=ia mb=ib if (a[ia] < b[ib]): ia+=1 else: ib+=1 print(str(a[ma])+" "+str(b[mb]))
n = int(input()) a = list(map(int, input().split())) m = int(input()) b = list(map(int, input().split())) scan(a,n,b,m) |
Задание 10. Корень кубического уравнения.
import math
def deg3(): print("This is a third degree polynomial calculator.") print("Please enter four numbers.") a = int(input()) b = int(input()) c = int(input()) d = int(input())
p = (-1 * b)/(3 * a) q = p ** 3 + (b * c - (3 * a * d))/ (6 * (a ** 2)) r = c / (3 * a)
x = (q + (q**2 + (r - p**2)**3) **1/2) **1/3 + (q + (q**2 + (r - p**2)**3) **1/2) **1/3 + p print("The root is:", x) total = (a * x**3) + (b * x**2) + (c * x) + d total = round(total, 3) return total |
Задание 11. Робот.
from itertools import permutations k = int(input()) chain = input() comb = list(permutations(set(chain), k)) s = 0 for i in comb: n = 0 t = 0 for j in chain: if (j == i[n]): if (n == k - 1): n = 0 t += 1 else: n += 1 if (t > 1): s += t
print(s) |