Uses crt; Var n,n1,n2,n3,n4,i,Armst:integer; Begin Write('Введите n: '); readln(n); Write('Числа Армстронга для n=',n,': '); if n=3 then for i:=100 to 999 do begin n1:=i div 100; n2:=i mod 100 div 10; n3:=i mod 10; Armst:=(n1*n1*n1)+(n2*n2*n2)+(n3*n3*n3); if Armst = i then write(Armst,' '); end; if n=4 then for i:=1000 to 9999 do begin n1:=i div 1000; n2:=i div 100 mod 10; n3:=i mod 100 div 10; n4:=i mod 10; Armst:=(n1*n1*n1*n1)+(n2*n2*n2*n2)+(n3*n3*n3*n3)+(n4*n4*n4*n4); if Armst = i then write(Armst,' '); end;
type tWP = record naim: string; wide: real; leng: real; cost: real end;
var WallPaper: array[1..n] of tWP; lr, wr, hr, ww, hw, wd, hd, gc, sg: real; i, nw, nd, nPanel, nWP, nRolls, index: integer; p, nPanRoll, ng, cg, C, Cmin: real;
begin writeln('Введите информацию по рулонам обоев:'); for i := 1 to n do begin with WallPaper[i] do begin write('Рулон ', i, ', наименование: '); readln(naim); write('ширина, длина, стоимость: '); readln(wide, leng, cost); end; end; writeln('Длина комнаты, ширина комнаты, высота оклейки'); readln(lr, wr, hr); writeln('Ширина окна, высота окна, количество окон'); readln(ww, hw, nw); writeln('Ширина двери, высота двери, количество дверей'); readln(wd, hd, nd); writeln('Стоимость обойного клея и площадь, которую им можно оклеить'); readln(gc, sg); p := 2 * (lr + wr) - nw * ww - nd * wd; //периметр оклейки ng := p * hr / sg; if ng > int(ng) then ng := int(ng) + 1; //количество банок с клеем cg := gc * ng; // общая стоимость клея Cmin := 32768; nRolls := 0; index := 0; for i := 1 to n do with WallPaper[i] do begin // Требуемое количество полотнищ, т.е. сколько раз // ширина рулона укладывается по периметру оклейки nPanel := Trunc(p / wide); if p - nPanel * wide > 0 then nPanel := nPanel + 1; // Определяем, сколько полотнищ получается из одного рулона // при заданной высоте оклейки. nPanRoll := leng / hr; // Вычисляем, сколько потребуется рулонов nWP := Trunc(nPanel / nPanRoll); if nPanel - nWP * nPanRoll > 0 then nWP := nWP + 1; C := nWP * cost + cg; // Cтоимость поклейки обоев if Cmin > C Then begin Cmin := C; index := i; nRolls := nWP end; end; with WallPaper[index] do begin writeln('Минимальные расходы на оклейку в сумме ', CMin:0:2); writeln('получаются при использовании ', nRolls, ' рул. обоев ',naim); writeln('шириной ', wide * 100:0:2, ' при цене ', cost:0:2, ' руб.'); writeln('за рулон длиной ', leng:0:0, ' м. и ',ng,' банок клея.') end end.
Тестовое решение:
Введите информацию по рулонам обоев: Рулон 1, наименование: Гладкие ширина, длина, стоимость: 0.8 10 190 Рулон 2, наименование: Гладкие ширина, длина, стоимость: 0.9 10 210 Рулон 3, наименование: Гладкие ширина, длина, стоимость: 1.2 8 240 Рулон 4, наименование: Ромбик ширина, длина, стоимость: 0.8 10.5 210 Рулон 5, наименование: Ромбик ширина, длина, стоимость: 0.9 10 230 Рулон 6, наименование: Ромбик ширина, длина, стоимость: 1.1 8.5 240 Рулон 7, наименование: Тисненые ширина, длина, стоимость: 0.8 10 218 Рулон 8, наименование: Тисненые ширина, длина, стоимость: 0.9 9.5 224 Рулон 9, наименование: Тисненые ширина, длина, стоимость: 1 9 235 Длина комнаты, ширина комнаты, высота оклейки 8.5 6.2 2.4 Ширина окна, высота окна, количество окон 1.6 1.2 1 Ширина двери, высота двери, количество дверей 0.95 2.2 2 Стоимость обойного клея и площадь, которую им можно оклеить 85 3.1 Минимальные расходы на оклейку в сумме 3255.00 получаются при использовании 7 рул. обоев Гладкие шириной 90.00 при цене 210.00 руб. за рулон длиной 10 м. и 21 банок клея.