Перейти к содержанию

Требуется написать программу, которая будет осуществлять стратегию покупки всех возможных акций, стоимость которых не превышает приемлемой цены 240, и выводить на экран информацию о количестве и средней стоимости всех приобретённых акций

Требуется написать программу, которая будет осуществлять стратегию покупки всех возможных акций, стоимость которых не превышает приемлемой цены 240, и выводить на экран информацию о количестве и средней стоимости всех приобретённых акций. Гарантируется, что будет куплена хотя бы 1 акция.

Описание входных и выходных данных.

На вход программе подаются сведения об акциях, которыми торгуют на фондовой бирже NASDAQ. В первой строке сообщается количество акций N (N > 100 000), каждая из следующих N строк имеет формат <Название Акции> <Тип Операции> <Цена>, где <Название Акции> — строка, состоящая не более чем из 4 символов, <Тип Операции> — строка, состоящая из символа «s» или «b», причём символ «s» означает, что данную акцию можно продать по указанной цене, а символ «b»—то, что данную акцию можно купить по указанной цене,<Цена>— не более чем трёхзначное целое число. <Название Акции> и <Тип Операции>, а также <Тип Операции> и <Цена> разделены одним пробелом.

Пример входных данных:

4

MSFT b 26

QQQ s 56

APP b 389

HP s 59

Пример выходных данных:

совершена 1 операция по покупке акций

средняя стоимость 1 приобретённой акции 26 долл.

Напишите эффективную как по времени, так и по памяти программу для решения поставленной задачи, если известно, что вводятся сведения о N акциях.

Программа считается эффективной по времени, если время работы программы пропорционально N, то есть при увеличении N в k раз время работы программы должно увеличиваться не более чем в k раз.

Программа считается эффективной по памяти, если размер памяти, необходимой программе для хранения всех переменных, не увеличивается с ростом числа N.

Максимальная оценка за правильную (не содержащую синтаксических ошибок и дающую правильный ответ при любых допустимых входных данных) программу, эффективную по времени и по памяти,—4 балла. Максимальная оценка за правильную программу, эффективную только по времени,—3 балла.

Максимальная оценка за правильную программу, не удовлетворяющую требованиям эффективности,—2 балла.

Вы можете написать одну программу или две программы решения задачи (например, одна из программ может быть менее эффективна). Если вы напишете две программы, то каждая из них будет оцениваться независимо от другой, итоговой станет бо´ льшая из двух оценок. Перед текстом программы обязательно кратко опишите алгоритм решения. Укажите использованный язык программирования и его версию.


Программа читает все входные данные один раз, не запоминая их в массиве, а запоминая только тип операции над акцией и цену, соответствующую данной акции.Программа производит покупку акции, если тип операции с ней соответствует покупке и если цена покупки не превышает приемлемой цены 240. При покупке акции увеличивается количество и общая стоимость всех приобретённых акций. В конце выводится число всех приобретённых акций, а также средняя стоимость одной проибретённой акции.

Пример программы на языке PascalABC 1.8. Программа эффективна по времени и по памяти.

var i, k, N, p: integer;

s: real; c: char;

begin

readln(N); {считано количество акций}

s := 0; {общая стоимость приобретённых акций}

k := 0; {количество приобретённых акций}

for i := 1 to N do

begin

repeat

read(c);

until c = ’ ’; {считано название акции}

read(c); {считан тип операции}

if c = ’b’ then begin

read(c); readln(p);

{сравниваем текущую цену с приемлемой ценой 240}

if p <= 240 then begin

s := s + p; {покупаем акцию}

k := k + 1; {увеличиваем число имеющихся акций}

end;

end;

end;

writeln(’совершено ’,k,’операций по покупке акций’);

writeln(’средняя стоимость 1 приобр. акции — ’,s/k);

end.

Другие задачи из этого раздела