Лаба яп 1 2020
.docx
МИНИСТЕРСТВО НАУКИ И ВЫСШЕГО ОБРАЗОВАНИЯ РОССИЙСКОЙ ФЕДЕРАЦИИ
ФЕДЕРАЛЬНОЕ ГОСУДАРСТВЕННОЕ БЮДЖЕТНОЕ
ОБРАЗОВАТЕЛЬНОЕ УЧРЕЖДЕНИЕ ВЫСШЕГО ОБРАЗОВАНИЯ
«ДОНСКОЙ ГОСУДАРСТВЕННЫЙ ТЕХНИЧЕСКИЙ УНИВЕРСИТЕТ»
(ДГТУ)
Факультет: Информатика и вычислительная техника
Кафедра: Кибербезопасность информационных систем
ПРАКТИЧЕСКАЯ РАБОТА № 1
на тему: «Простые структуры данных»
Выполнил: обучающийся гр. ВКБ33
Егоров Никита Валентинович
Проверил:
Доцент, Савельев Василий Александрович
Ростов-на-Дону
2020
Практическая работа № 1. Простые структуры данных
Цель работы:
Изучить простые структуры данных: массив, список, двунаправленный список, стек, очередь, дек, динамический массив.
Ход работы:
Задание 1. (Гоблины и шаманы)
#include <iostream> #include <vector> using namespace std; typedef unsigned ui; int main() { ios::sync_with_stdio(false); cin.tie(0);
freopen("input.txt", "r", stdin); freopen("output.txt", "w", stdout);
vector<ui> v; vector<ui>::iterator it; ui N, pos; char op;
cin >> N; while (N--) { cin >> op; if (op == '-') { pos = v[0]; v.erase(v.begin()); cout << pos << '\n'; } else { cin >> pos; if (op == '+') v.push_back(pos); else { it = v.begin() + (ui)(v.size() + 1) / 2; v.insert(it, pos); } } } return 0; } |
Результат:
Задание 2. (Баржа)
from collections import deque
request = input().split() docks = int(request[0]) cells = int(request[1]) max_len = int(request[2]) max_tanks = 0 current_tanks = 0 error = 0
cell = []
for i in range(cells): cell.append(deque())
for i in range(docks): action = input().split()
if (action[0] == "+"): cell[int(action[1]) - 1].append(action[2]) current_tanks += 1 if (current_tanks > max_len): error = 1 break if(current_tanks > max_tanks): max_tanks = current_tanks else: if(len(cell[int(action[1]) - 1]) > 0): if (cell[int(action[1]) - 1].pop() != action[2]): error = 1 break else: current_tanks -= 1 else: error = 1 break if (current_tanks > 0 or error): print("Error") else: print(max_tanks) |
Результат:
Задание 3. (Реклама)
N, K = map(int, input().split()) times = list(map(int, input().split()))
flag = True
max_ind = times.index(max(times)) max_1 = times[max_ind] max_indecs = []
for i in range(max_ind, N): if(times[i] == max_1): max_indecs.append(i)
for i in max_indecs: if (flag): for j in max_indecs: if (i == j): continue elif (abs(j - i) > K - 1): print(max_1 * 2) flag = False break
------------------------------------------------------------------------
if (flag): max_2 = 0 max_ind_2 = 0 for ind in max_indecs: for i in range(len(times)): if (i == ind): continue elif ((times[i] > max_2) and (abs(ind - i) > K - 1)): max_2 = times[i] max_ind_2 = i if(max_2 != 0): print(max_1 + max_2) flag = False
-------------------------------------------------------------------------- if (flag): max_sum = 0 for i in range(N - K): edge = i + K if(edge != N): j = max(times[edge : N]) s = times[i] + j if (s > max_sum): max_sum = s print(max_sum) |
Результат:
Задание 4. (Заполнение диагоналями)
x, y = map(int, input().split())
matrix = [[0]*y for i in range(x)] i = 0 j = 0 for number in range(x*y): matrix[i][j] = number if j == 0 or i == x - 1: if j == 0: if i + j + 1 < y: j = i + j + 1 i = 0 else: i = i - y + 2 j = y - 1 else: if i == x - 1: if y - j - x - 1 >= 0: j = i + j + 1 i = 0 else: i = j + x - y + 1 j = y - 1 else: i += 1 j -= 1 for i in range(x): for j in range(y): print('%3d' % matrix[i][j], end = '') print('\t') |
Результат:
Задание 5. (Правильная скобочная последовательность)
sequence = list(input()) stack = []
for i in range(len(sequence)): if sequence[i] == '(' or sequence[i] == '{' or sequence[i] == '[': stack.append(sequence[i]) continue if (sequence[i] == ')' or sequence[i] == '}' or sequence[i] == ']') and stack: if (stack[-1] + sequence[i] == '()') or (stack[-1] + sequence[i] == '{}') or (stack[-1]+sequence[i] == '[]'): stack.pop() else: print('no') exit() else: print('no') exit() if stack == []: print('yes') else: print('no') |
Результат:
Задание 6. (Сортировка вагонов)
l = int(input()) s = list(map(int, input().split()))
tup = [0] tr2 = [0]
for i in range(l): while tup[-1] == tr2[-1] + 1: tr2.append(tup[-1]) tup.pop() if s[i] == tr2[-1] + 1: tr2.append(s[i]) else: tup.append(s[i])
while tup[-1] == tr2[-1] + 1: tr2.append(tup[-1]) tup.pop()
if tr2[-1] == l: print('YES') else: print('NO') |
Результат:
Задание 7. (Парикмахерская)
number = int(input()) workers_time = [0, 0, 0]
for i in range(number):
request = input().split() minutes = int(request[0])*60 + int(request[1]) m = workers_time.index(min(workers_time)) if (workers_time[m] <= minutes): workers_time[m] = minutes + 30 else: workers_time[m] += 30 print(str(workers_time[m] // 60) + " " + str(workers_time[m] % 60)) |
Результат:
Задание 8. (Шифровка)
string = input() string_list = list(string) n = len(string) // 2 for i in range(n): string_list[2 * i : 2 * i + 2] = string[i + n], string[i]
print(''.join(string_list)) |
Результат:
Задание 9. (Списки по классам)
file = open('input.txt','r', encoding = 'KOI8-r')
class_9 = [] class_10 = [] class_11 = []
for line in file: line = line.replace("\n", "").split(" ") if (line[0] == "9"): class_9.append("9 " + line[1]) elif (line[0] == "10"): class_10.append("10 " + line[1]) else: class_11.append("11 " + line[1])
file.close()
f = open('output.txt', 'w', encoding = 'KOI8-r')
for i in class_9: f.write(i + '\n') for i in class_10: f.write(i + '\n') for i in class_11: f.write(i + '\n')
f.close() |
Результат:
Задание 10. (Игра в пьяницу)
first = input().split() second = input().split() n = 0 while first and second: n += 1 a, b = first.pop(0), second.pop(0) if a > b and (b, a) != ('0', '9') or (a, b) == ('0', '9'): first += [a, b] else: second += [a, b] if n == 1000000: print('botva') break else: print('first' if first else 'second', n) |
Результат: