Продавец предоставляет покупателю, делающему большую закупку, скидку по
Условие
Продавец предоставляет покупателю, делающему большую закупку, скидку по следующим правилам:— на каждый второй товар стоимостью больше 100 рублей предоставляется скидка 30%;— общая стоимость покупки со скидкой округляется вверх до целого числа рублей;— порядок товаров в списке определяет продавец и делает это так, чтобы общая сумма скидки была наименьшей.
По известной стоимости каждого товара в покупке необходимо определить общую стоимость покупки с учётом скидки и стоимость самого дорогого товара, на который будет предоставлена скидка.
Входные данные.
Задание 26Первая строка входного файла содержит число N — общее количество купленных товаров. Каждая из следующих N строк содержит одно целое число — стоимость товара в рублях.В ответе запишите два целых числа: сначала общую стоимость покупки с учётом скидки, затем стоимость самого дорогого товара, на который будет предоставлена скидка.
Пример входного файла:6125100490215144320 В данном случае товар стоимостью 100 не участвует в определении скидки, остальные товары продавцу выгодно расположить в таком порядке цен: 490, 125, 215, 144, 320. Тогда скидка предоставляется на товары стоимостью 125 и 144. Стоимость этих двух товаров со скидкой составит 188,3 рубля, после округления — 189 рублей. Общая стоимость покупки составит:100 + 490 + 215 + 320 + 189 = 1314 рублей.
Самый дорогой товар, на который будет получена скидка, стоит 144 рубля. В ответе нужно записать числа 1314 и 144. Ответ:
Ответ
Ответ и полный разбор откроются после входа
Посмотреть ответРешение по шагам
Как рассуждать
Решение. Заметим, что числа, меньшие 101, можно сразу суммировать, поскольку на них скидка не распространяется. Поэтому, построчно считывая числа из файла, числа, меньшие 101, будем сразу накапливать в переменной sum, а остальные числа будем записывать в массив. Далее, отсортировав массив по возрастанию, будем прибавлять к переменной sum стоимость товара с учётом скидки, если данный элемент массива имеет индекс, меньший, чем количество чисел, поделённое пополам, и без учёта скидки в остальных случаях. Приведём решение на языке 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
Осталось ещё 1 шаг
Примечание. Путь к файлу необходимо указать…
Бесплатно · займёт минуту