Покупатель должен заплатить в кассу S руб.У него имеются купюры по 1,5,10,50,100,500,1000...

0 голосов
322 просмотров

Покупатель должен заплатить в кассу S руб.У него имеются купюры по 1,5,10,50,100,500,1000 и 10000 руб.Сколько купюр разного достоинства отдаст покупатель,если он начинает платить с самых крупных купюр?
Это паскаль,нужно через while сделать


Информатика (415 баллов) | 322 просмотров
0
Рабочий код, подредактируйте под себя и нормально
S = int(input())
while True:
    if S // 5000:
        A = S // 5000
        D = S - (A*5000)
        print('Купюр наминалом 5000 -', A)
        if D // 1000:
            G = D // 1000
            D1 = D - (G*1000)
            print('Купюр наминалом 1000 -', G)
            if D1 // 500:
                T = D1 // 500
                D2 = D1 - (T*500)
                print('Купюр наминалом 500 -', T)
                if D2 // 50:
                    Y = D2 // 50
                    D3 = D2 - (Y*50)
                    print('Купюр наминалом 50 -', Y)
                    if D3 // 10:
                        R = D3 // 10
D4 = D3 - (R*10)
                        print('Монет наминалом 10 -', R)
                        if D4 // 5:
                            E = D4 // 5
                            D5 = D4 - (E*5)
                            print('Монет наминалом 5 -', E)
                            if D5 // 1:
                                Q = D5 // 1
                                print('Монет наминалом 1 -', Q)
            break
Дано ответов: 2
0 голосов
Правильный ответ

Решение, что называется, "в лоб" (далеко, очень далеко, не самое лучшее):
var s,k1,k5,k10,k50,k100,k500,k1000,k10000:integer;
begin
write('s = '); readln(s);
k1:=0; k5:=0; k10:=0; k50:=0; 
k100:=0; k500:=0; k1000:=0; k10000:=0;
while s>=10000 do begin s:=s-10000; k10000:=k10000+1; end;
while s>=1000 do begin s:=s-1000; k1000:=k1000+1; end;
while s>=500 do begin s:=s-500; k500:=k500+1; end;
while s>=100 do begin s:=s-100; k100:=k100+1; end;
while s>=50 do begin s:=s-50; k50:=k50+1; end;
while s>=10 do begin s:=s-10; k10:=k10+1; end;
while s>=5 do begin s:=s-5; k5:=k5+1; end;
while s>=1 do begin s:=s-1; k1:=k1+1; end;
writeln('k10000=',k10000,' k1000=',k1000,' k500=',k500,' k100=',k100,' k50=',k50,' k10=',k10,' k5=',k5,' k1=',k1);
writeln(' Всего купюр = ',k1+k5+k10+k50+k100+k500+k1000+k10000);
end.

Пример:
s = 27879
k10000=2 k1000=7 k500=1 k100=3 k50=1 k10=2 k5=1 k1=4
 Всего купюр = 21

(194k баллов)
0 голосов

>нельзя использовать mod и div
А и не надо, хотя с ними было бы понятнее.

type
TNominals=(nm1, nm5, nm10, nm50, nm100, nm500, nm1000, nm10000);

const
NomToNum:array[TNominals] of integer = (1, 5, 10, 50, 100, 500, 1000, 10000);

var s,q:integer;
j:TNominals;
begin
readln(s);
for j:=High(TNominals) downto Low(TNominals) do begin
q:=trunc(s/NomToNum[j]);
writeln(NomToNum[j],':',q);
s:=s-q*NomToNum[j];
end;

(26 баллов)
0

нужно с while