Добавил:
Negorov1337@gmail.com inst:vech.no_17 Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:

лаба яп 2 2020

.docx
Скачиваний:
8
Добавлен:
11.10.2020
Размер:
187.13 Кб
Скачать

МИНИСТЕРСТВО НАУКИ И ВЫСШЕГО ОБРАЗОВАНИЯ РОССИЙСКОЙ ФЕДЕРАЦИИ

ФЕДЕРАЛЬНОЕ ГОСУДАРСТВЕННОЕ БЮДЖЕТНОЕ

ОБРАЗОВАТЕЛЬНОЕ УЧРЕЖДЕНИЕ ВЫСШЕГО ОБРАЗОВАНИЯ

«ДОНСКОЙ ГОСУДАРСТВЕННЫЙ ТЕХНИЧЕСКИЙ УНИВЕРСИТЕТ»

(ДГТУ)

Факультет: Информатика и вычислительная техника

Кафедра: Кибербезопасность информационных систем

ПРАКТИЧЕСКАЯ РАБОТА № 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)

Соседние файлы в предмете Языки программирования