|
|
ru.algorithms- RU.ALGORITHMS ---------------------------------------------------------------- From : Max Alekseyev 2:5015/60 12 Nov 2002 15:25:04 To : Anton Kuznetsov Subject : Котлы -------------------------------------------------------------------------------- Replying to a message of Anton Kuznetsov to All: AK> Дано N котлов размерами А1, А2, А3... Аn литров + есть бесконечный AK> котел с водой. Из большого котла можно зачерпывать котлы только AK> целиком, а вокогда переливают воду из котла Ai в Aj, то продолжается AK> это до тех пор пока во втором котле есть куда воду пихать и пока есть AK> откуда воду брать... AK> Вообщем вопрос такой можно ли набрать M литров? Вот решение для двух котлов: ===cut=== var n,m,k,x,u,v:longint; a,a2,b,b2,t:longint; j1,j2:char; begin write('Input A B M = '); readln(n,m,k); v:=m; x:=n; a:=1; a2:=0; b:=0; b2:=1; repeat u:=x; t:=v div x; x:=v mod x; v:=u; u:=a2; a2:=a-t*a2; a:=u; u:=b2; b2:=b-t*b2; b:=u; until x=0; { we got v = gcd(n,m) = a*m + b*n } if k mod v<>0 then begin writeln('Impossible!'); halt; end; a:=a*k div v; b:=b*k div v; if a<0 then begin t:=(abs(a)+n-1) div n; inc(a,t*n); dec(b,t*m); end; t:=a div n; dec(a,t*n); inc(b,t*m); if abs(a)+abs(b)<=(n+m) shr 1 then begin j1:='A'; j2:='B'; end else begin j1:='B'; j2:='A'; u:=m; m:=n; n:=u; end; v:=0; repeat writeln('Fill up jug ',j2); u:=m; repeat writeln('Pour water from jug ',j2,' into jug ',j1); if u+v>n then begin dec(u,n-v); v:=n end else begin inc(v,u); u:=0 end; if u=k then begin writeln('Well done! There are exactly ',k,' liters in jug B.'); halt; end; if v=n then begin writeln('Empty jug ',j1); v:=0; end; until u=0; until 0<>0; end. ===cut=== Regards, ш.ш Max ~ --- FleetStreet 1.27.3.8 * Origin: (2:5015/60) Вернуться к списку тем, сортированных по: возрастание даты уменьшение даты тема автор
Архивное /ru.algorithms/18133dd10fbf.html, оценка из 5, голосов 10
|