Продавец предоставляет покупателю, делающему большую закупку, скидку по следующим правилам:
— на каждый второй товар стоимостью больше
— общая стоимость покупки со скидкой округляется вверх до целого числа рублей;
— порядок товаров в списке определяет продавец и делает это так, чтобы общая сумма скидки была наименьшей.
По известной стоимости каждого товара в покупке необходимо определить общую стоимость покупки с учётом скидки и стоимость самого дорогого товара, на который будет предоставлена скидка.
Входные данные.
Первая строка входного файла содержит число N — общее количество купленных товаров. Каждая из следующих
В ответе запишите два целых числа: сначала общую стоимость покупки с учётом скидки, затем стоимость самого дорогого товара, на который будет предоставлена скидка.
Пример входного файла:
6
125
50
490
215
144
320 В данном случае товар стоимостью 50 не участвует в определении скидки, остальные товары продавцу выгодно расположить в таком порядке цен: 490, 125, 215, 144, 320. Тогда скидка предоставляется на товары
Самый дорогой товар, на который будет получена скидка, стоит
Ответ:
Заметим, что числа,
Приведём решение на языке 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 < 51 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.75;
maxPrice := round(a[i])
end
else
sum := sum + a[i];
writeln(round(sum+0.5), ' ', maxPrice);
end.
В результате работы данного алгоритма при вводе данных из файла в условии получаем ответ — 469784 511.
Ответ: 469784 511.
Примечание. Путь к файлу необходимо указать согласно расположению файла на Вашем компьютере.
Приведём другое решение на языке Python.
import math
f = open('inf_22_10_20_26.txt')
a = []
m = int(f.readline()) # Удаляем первую строку(общее количество купленных товаров)
s = 0
maxi = 0
for i in f:
x = int(i)
if x <= 50:
s += x
else:
a.append(x)
a.sort()
for i in range(len(a)):
if i < len(a)//2:
s += a[i] * 0.75
maxi = a[i]
else:
s += a[i]
print(math.ceil(s), maxi)
Приведём решение Владимира Медведя на языке Python.
f = open('26.txt')
n = f.readline() # количество товаров
a = [int(i) for i in f]
a.sort()
men50 = []
while a[0] <= 50:
men50.append(a[0])
del a[0]
ksum = sum(men50)
for i in range(len(a) // 2):
ksum += a[i] * 0.75
ksum += a[-i - 1]
if len(a)%2==1:
ksum+=a[len(a)//2]
print(int(ksum) + 1, a[len(a) // 2 - 1])
Приведём решение Юрия Красильникова на языке Python.
a = [int(b) for b in open("inf_22_10_20_26.txt")][1:]
sm = 0
k = []
for b in a:
if b > 50:
k.append(b)
else:
sm += b
k.sort()
c = len(k) // 2
print(sm + sum(k[c:]) + round(sum(k[:c]) * 0.75), k[:c][-1])
Приведём решение Артура Валеева на языке Python.
a = [int(s) for s in open('inf_22_10_20_26.txt')][1:]
b50 = sorted([x for x in a if x > 50])
skidka = sum(b50[:len(b50)//2])//4
print(sum(a) - skidka,b50[len(b50)//2 - 1])

