Продавец предоставляет покупателю, делающему большую закупку, скидку по следующим правилам:
— на каждый второй товар стоимостью больше
— общая стоимость покупки со скидкой округляется вверх до целого числа рублей;
— порядок товаров в списке определяет продавец и делает это так, чтобы общая сумма скидки была наименьшей.
По известной стоимости каждого товара в покупке необходимо определить общую стоимость покупки с учётом скидки и стоимость самого дорогого товара, на который будет предоставлена скидка.
Входные данные.
Первая строка входного файла содержит
В ответе запишите два целых числа: сначала общую стоимость покупки с учётом скидки, затем стоимость самого дорогого товара, на который будет предоставлена скидка.
Пример входного файла:
6
125
100
490
215
144
320
В данном случае товар стоимостью 100 не участвует в определении скидки, остальные товары продавцу выгодно расположить в таком порядке цен: 490, 125, 215, 144, 320. Тогда скидка предоставляется на товары
Самый дорогой товар, на который будет получена скидка, стоит
Ответ:
Заметим, что числа, меньшие 101, можно сразу суммировать, поскольку на них скидка не распространяется. Поэтому, построчно считывая числа из файла, числа,
Приведём решение на языке Pascal.
var
cntArray, n: integer;
a: array[1..1000] of real;
num: real;
sum: real;
maxPrice: integer;
f: text;
begin
assign(f,'C:\26.txt');
reset(f);
sum := 0;
cntArray := 1;
readln(f, n);
while not Eof(f) do begin
readln(f, num);
if num < 101 then
sum := sum + num
else begin
a[cntArray] := num;
cntArray := cntArray + 1;
end;
end;
cntArray := cntArray - 1;
for i:integer := 1 to cntArray - 1 do
for j:integer := 1 to cntArray - 1 do begin
if a[j] > a[j+1] then begin
num := a[j];
a[j] := a[j+1];
a[j+1] := num;
end;
end;
for i:integer := 1 to cntArray do
if i <= cntArray div 2 then begin
sum := sum + a[i]*0.70;
maxPrice := round(a[i])
end
else
sum := sum + a[i];
writeln(round(sum+0.5), ' ', maxPrice);
end.
В результате работы данного алгоритма при вводе данных из файла в условии получаем ответ — 459678 543.
Ответ: 459678 543.
Примечание. Путь к файлу необходимо указать согласно расположению файла на Вашем компьютере.
Приведём другое решение на языке Python.
import math
f = open('inf_22_10_20_26.txt')
a = []
n = int(f.readline()) # Удаляем первую строку(общее количество купленных товаров)
s = 0
maxi = 0
for i in f:
x = int(i)
if x <= 100:
s += x
else:
a.append(x)
a.sort()
for i in range(len(a)):
if i < len(a)//2:
s += a[i] * 0.70
maxi = a[i]
else:
s += a[i]
print(math.ceil(s), maxi)

