информатика Принцип домино. Имеется ряд, состоящий из вертикально стоящих костяшек домино разного раз- мера. Для каждой из костяшек известна ее высота hi и расстояние до следующей костяшки li. Тол- щина костяшки считается пренебрежимо малой. Первую костяшку толкают, и она падает в сторону второй костяшки. Падение происходит без про- скальзывания, то есть нижний край костяшки остается на том же месте. Если костяшка при падении задевает другую костяшку (или хотя бы касается ее), это приводит к тому, что дальше будут падать обе эти костяшки. Необходимо выяснить, сколько всего костяшек упадет. Входные данные. В первой строке задается натуральное число N (1 < N < 2 ■ 105), определяющее общее количество костяшек. Во второй строке задается N чисел, определяющих высоты соответству- ющих костяшек. В третьей строке задается N — 1 число, i-ое из этих чисел определяет расстояние между i-й и (i + 1)-й костяшкой. Все числа натуральные и не превосходят 109. Выходные данные. Выведите одно число - количество костяшек, которые упадут после толчка первой костяшки. Примеры входных и выходных данных вво д вывод 4 4 1 2 3 4 1 2 1 3 2 5 6 7 4 8
--- Python 3.8.3 ---
import typing
from typing import Iterable
from typing import List
from typing import Any
from typing import AnyStr
from typing import Callable
from typing import NoReturn
def _Ok(func: Callable[[Any], Any]):
def OkWrapper(*a, **kw):
r = func(*a, **kw)
if(r):
print('ok')
else:
print('Error')
return OkWrapper
class Queue:
buffer = []
_t = None
_iterPos = 0
def __init__(self, t, InitSeq : Iterable[Any] = None):
if (InitSeq != None):
self.buffer.extend(InitSeq)
self._t = t
def __getitem__(self, position):
return self.buffer[position]
def __len__(self):
return len(self.buffer)
@property
def T(self):
return self._t
@_Ok
def push(self, item):
assert isinstance(type(item), type(self._t))
self.buffer.append(item)
self._length = len(self.buffer)
return True
@_Ok
def clear(self):
self.buffer.clear()
return True
def front(self):
return self._peek(0)
@_Ok
def pop(self):
if (len(self.buffer) > 0):
self.buffer.pop(0); return True
return False
def _peek(self, itempos):
if (len(self.buffer) > 0):
return self.buffer[itempos]
print('Error: Empty Queue'); return
def CommandHandler(q: Queue, cmds: List[AnyStr]) -> NoReturn:
IsRunning = True
while IsRunning:
NewCmd = input()
Tokens = NewCmd.split(' ')
if (Tokens[0] == 'push'):
try:
q.push(q.T(Tokens[1]))
except IndexError:
print('Invalid Command')
except AssertionError:
print('Invalid pushed type')
if (Tokens[0] == 'pop'):
q.pop()
if (Tokens[0] == 'front'):
print(q.front())
if (Tokens[0] == 'size'):
print( len(q) )
if (Tokens[0] == 'clear'):
q.clear()
if (Tokens[0] == 'exit'):
print('bye')
IsRunning = False
def main():
q = Queue(int)
avCommands = ['push','pop','front','size','clear', 'exit']
CommandHandler(q, avCommands)
if __name__ == "__main__":
main()
Пояснения:
Экземпляр Queue может инициализироваться как пустой очередью, так и уже заполненной. Что бы инициализировать пустую очередь, не передавайте в конструктор InitSeq:
q = Queue(int)
Что бы инициализировать очередь с некоторыми значениями, передайте в конструктор InitSeq:
q = Queue(int, [1,2,4,5,6])
Класс Queue строго типизирован, и каждый новый элемент будет проверяться на соответствие хранимому типу, с которым был инициализирован текущий экземпляр.
В моей реализации класс Queue не поддерживает изменение хранимого типа с приведением всех хранимых значений к новому типу
В моей реализации класс Queue не поддерживает изменение хранимого типа без приведения хранимых значений
В моей реализации класс Queue не поддерживает изменение хранимого типа при пустом буфере.
В моей реализации класс Queue является итерируемым объектом (Поддерживает простой перебор в цикле for), а так же поддерживает доступ к элементу по индексу из вне.
q[index] -> q.buffer[index]
1)а
var a:real;
begin
readln(a);
a1 := a*a; /получили а^2
a := a1*a1; /получили a^4
a := a1*a*a; /получили a^(4+4+2)
writeln(a);
end.
1б)
var x:real;
i:integer;
begin
readln(a);
a1 := a*a*a; /получили а^3
a := a1*a1*a1; /получили a^9
a := a*a1*a1; /получили а^(9+3+3)
writeln(a);
end.
2)
var a:real;
begin
readln(a);
writeln('высоты равны', a*a*sqrt(3)/4*a);
writeln('Радиус вписанной окружности', a*a*a/4*a*a*sqrt(3)/4);
writeln('Радиус описанной окружности', a*a*sqrt(3)/4*2/3*a);
end.
3)var a:real;
begin
readln(a);
writeln('В килобайтах' a/1024);
writeln('В мегабайтах' a/(1024*1024));
end.