Если словесно. Берём пустые сосуды. Наполняем 5-литровый и переливаем в 7литровый. Результат: 5литровый - пуст, в 7литровом - 5 литров. Наполняем 5литровый и переливаем в 7литровый столько, чтобы 7литровый наполнился. Результат: 7литровый полон ( 5было + 2литра из 5литрового). В 5литровом 3 литра(5 было - 2 пепелили в 7литровый). 7литровый опустошаем и в него переливаем содержимое 5литрового. Результат: 5литровый пуст (перелили в 7литровый), в 7литровом 3 литра. Наполняем 5 литровый и переливаем в 7литровый столько, чтобы 7литровый заполнился. Результат : 7литровый полон ( 3литра было + 4литра из 5 литрового. В 5литровом остался литр (5 литров - 4литра перелили в 7литровый). Требуемый литр в 5литровом. . Есть еще один . берём также пустые сосуды. Наполняем 7литровый. переливаем в 5литровый столько, чтобы 5литровый наполнился. результат: в 7литровом - 2 литра (5 перелили в 5литровый), 5 литровый полон. опустошаем 5 литровый и заливаем в него содержимое 7литрового. результат: 7 литровый - пуст, в 5литровом - 2литра. наполняем 7литровый и переливаем в 5 литровый столько, чтобы наполнить 5литровый. результат: 5литровый полон (2литра +3литра из 7литрового), в 7литровом - 4литра (7литров - 3литра перелили в 5литровый). 5литровый опустошаем и в него заливаем содержимое 7литрового. результат: 7литровый пуст, в 5литровом - 4литра. наполняем 7литровый и переливаем в 5литровый столько, чтобы наполнить литровый. результат: 5литровый полон(4литра +1литр из 7литрового), в 7литровом-6литров. опустошаем 5 литровый и заливаем в него из 7литрового столько, чтобы 5литровый заполнился. результат: 5литровый полон, в 7литровом - 1литр (6литров - 5литров перелили в 5литровый). искомый литр в 7литровом сосуде
// PascalABC.NET 3.3, сборка 1627 от 27.01.2018 // Внимание! Если программа не работает, обновите версию!
function CycleFraction(n:integer):string; begin if n=1 then begin Result:='1'; Exit end; var ost:=new SortedList<integer,integer>; var res:=new List<integer>; ost.Add(1,1); var a:=1; var k:=1; while True do begin a*=10; var r:=a div n; res.Add(r); a:=a mod n; if ost.ContainsKey(a) then begin var p:=ost.Get(a); Result:=res.JoinIntoString(''); Result:='0.'+Result?[:p]+(a<>0?'('+Result?[p:]+')':''.ToString); exit end else begin k+=1; ost.Add(a,k); end end end;
begin var n:=ReadInteger('n='); Writeln('1/',n,' = ',CycleFraction(n)) end.
Берём пустые сосуды.
Наполняем 5-литровый и переливаем в 7литровый.
Результат: 5литровый - пуст, в 7литровом - 5 литров.
Наполняем 5литровый и переливаем в 7литровый столько, чтобы 7литровый наполнился.
Результат: 7литровый полон ( 5было + 2литра из 5литрового). В 5литровом 3 литра(5 было - 2 пепелили в 7литровый).
7литровый опустошаем и в него переливаем содержимое 5литрового.
Результат: 5литровый пуст (перелили в 7литровый), в 7литровом 3 литра.
Наполняем 5 литровый и переливаем в 7литровый столько, чтобы 7литровый заполнился.
Результат : 7литровый полон ( 3литра было + 4литра из 5 литрового. В 5литровом остался литр (5 литров - 4литра перелили в 7литровый).
Требуемый литр в 5литровом.
.
Есть еще один
.
берём также пустые сосуды. Наполняем 7литровый. переливаем в 5литровый столько, чтобы 5литровый наполнился.
результат: в 7литровом - 2 литра (5 перелили в 5литровый), 5 литровый полон.
опустошаем 5 литровый и заливаем в него содержимое 7литрового.
результат: 7 литровый - пуст, в 5литровом - 2литра.
наполняем 7литровый и переливаем в 5 литровый столько, чтобы наполнить 5литровый.
результат: 5литровый полон (2литра +3литра из 7литрового), в 7литровом - 4литра (7литров - 3литра перелили в 5литровый).
5литровый опустошаем и в него заливаем содержимое 7литрового.
результат: 7литровый пуст, в 5литровом - 4литра.
наполняем 7литровый и переливаем в 5литровый столько, чтобы наполнить литровый.
результат: 5литровый полон(4литра +1литр из 7литрового), в 7литровом-6литров.
опустошаем 5 литровый и заливаем в него из 7литрового столько, чтобы 5литровый заполнился.
результат: 5литровый полон, в 7литровом - 1литр (6литров - 5литров перелили в 5литровый). искомый литр в 7литровом сосуде
// Внимание! Если программа не работает, обновите версию!
function CycleFraction(n:integer):string;
begin
if n=1 then begin Result:='1'; Exit end;
var ost:=new SortedList<integer,integer>;
var res:=new List<integer>;
ost.Add(1,1);
var a:=1;
var k:=1;
while True do begin
a*=10;
var r:=a div n;
res.Add(r);
a:=a mod n;
if ost.ContainsKey(a) then begin
var p:=ost.Get(a);
Result:=res.JoinIntoString('');
Result:='0.'+Result?[:p]+(a<>0?'('+Result?[p:]+')':''.ToString);
exit
end
else begin
k+=1;
ost.Add(a,k);
end
end
end;
begin
var n:=ReadInteger('n=');
Writeln('1/',n,' = ',CycleFraction(n))
end.
Примеры
n= 2
1/2 = 0.5
n= 7
1/7 = 0.(142857)
n= 28
1/28 = 0.03(571428)
n= 118
1/118 = 0.0(0847457627118644067796610169491525423728813559322033898305)