Предприятие производит оптовую закупку некоторых изделий A и B, на
Условие
Предприятие производит оптовую закупку некоторых изделий A и B, на которую выделена определённая сумма денег. У поставщика есть в наличии партии этих изделий различных модификаций по различной цене. На выделенные деньги необходимо приобрести как можно больше изделий B независимо от модификации. Если у поставщика закончатся изделия B, то на оставшиеся деньги необходимо приобрести как можно больше изделий A. Известны выделенная для закупки сумма, а также количество и цена различных модификаций данных изделий у поставщика. Необходимо определить, сколько будет закуплено изделий A и какая сумма останется неиспользованной.
Входные данные.
Задание 26Первая строка входного файла содержит два целых числа: N — общее количество партий изделий у поставщика и M — сумма выделенных на закупку денег (в рублях). Каждая из следующих N строк описывает одну партию и содержит два целых числа (цена одного изделия в рублях и количество изделий в партии) и один символ (латинская буква A или B), определяющий тип изделия. Все данные в строках входного файла отделены одним пробелом.В ответе запишите два целых числа: сначала количество закупленных изделий типа A, затем оставшуюся неиспользованной сумму денег.
Пример входного файла:4 100030 8 A50 12 B40 14 A20 10 BВ данном случае сначала нужно купить изделия B: 10 изделий по 20 рублей и 12 изделий по 50 рублей. На это будет потрачено 800 рублей. На оставшиеся 200 рублей можно купить 6 изделий A по 30 рублей. Таким образом, всего будет куплено 6 изделий A и останется 20 рублей. В ответе надо записать числа 6 и 20. Ответ:
Ответ
Ответ и полный разбор откроются после входа
Посмотреть ответРешение по шагам
Как рассуждать
Решение. Создадим два двумерных массива, для партий изделий A и для партий изделий B. Считаем данные из файла в эти массивы, в первую строку массива будем считывать цену изделия в партии, во вторую строку будем считывать количество изделий в партии. Далее отсортируем эти массивы по возрастанию. Сначала найдём, сколько изделий B можно закупить на выделенную сумму, последовательно прибавляя к переменной sum цену изделия в текущей партии. После найдём, сколько изделий A можно закупить на выделенную сумму, последовательно прибавляя к переменной sum цену изделия в текущей партии, также будем накапливать в переменной countSumA количество купленных изделий. Приведём решение на языке Pascal.var n, m, x, y, t1, t2, countA, countB: integer; z: string; arrayA: array [1..500,1..2] of integer; arrayB: array [1..500,1..2] of integer; sum, countSumA: integer; f: text;begin assign(f,'C:\26.txt'); reset(f); readln(f, n, m); countA := 0; countB := 0; sum := 0; for i: integer := 1 to m do begin if not eof(f) then readln(f, x, y, z) else break; if z.Contains('A') then begin arrayA[i,1] := x; arrayA[i,2] := y; countA := countA + 1; end; if z.Contains('B') then begin arrayB[i,1] := x; arrayB[i,2] := y; countB := countB + 1; end; end; for i:integer := 1 to n do for j:integer := i + 1 to n do if arrayA[i,1] > arrayA[j,1] then begin t1 := arrayA[i,1]; t2 := arrayA[i,2]; arrayA[i,1] := arrayA[j,1]; arrayA[i,2] := arrayA[j,2]; arrayA[j,1] := t1; arrayA[j,2] := t2; end; for i:integer := 1 to n do for j:integer := i + 1 to n do if arrayB[i,1] > arrayB[j,1] then begin t1 := arrayB[i,1]; t2 := arrayB[i,2]; arrayB[i,1] := arrayB[j,1]; arrayB[i,2] := arrayB[j,2]; arrayB[j,1] := t1; arrayB[j,2] := t2; end; for i:integer := n-countB+1 to n do for j:integer := 1 to arrayB[i,2] do if (sum + arrayB[i,1]) < m then sum := sum + arrayB[i,1] else break; for i:integer := n-countA+1 to n do for j:integer := 1 to arrayA[i,2] do if (sum + arrayA[i,1]) < m then begin sum := sum + arrayA[i,1]; countSumA := countSumA + 1; end else break; writeln(countSumA, ' ', m - sum);end. В результате работы данного алгоритма при вводе данных из файла в условии получаем ответ — 7165
Осталось ещё 1 шаг
Примечание. Путь к файлу необходимо указать…
Бесплатно · займёт минуту