рдЙрдВрдЧрд▓рд┐рдпреЛрдВ рдкрд░ рд╣рдиреЛрдИ рдХрд╛ рдЯреЙрд╡рд░

рдЫрд╡рд┐ рдХреБрдЫ рдкрд░рд┐рдЪрд┐рдд рдкреНрд░реЛрдЧреНрд░рд╛рдорд░реЛрдВ рдХреЗ рд╕рд╛рде рдмрд╛рдд рдХрд░рдиреЗ рдХреЗ рдмрд╛рдж, рдореБрдЭреЗ рдЕрдЪрд╛рдирдХ рдкрддрд╛ рдЪрд▓рд╛ рдХрд┐ рд╣рд░ рдХреЛрдИ рд╣рдиреЛрдИ рдХреЗ рдЯреЙрд╡рд░ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдирд╣реАрдВ рдЬрд╛рдирддрд╛ рд╣реИ, рдФрд░ рдЬреЛ рд▓реЛрдЧ рдЬрд╛рдирддреЗ рд╣реИрдВ, рдЙрдирдореЗрдВ рд╕реЗ рдмрд╣реБрдд рдХрдо рд▓реЛрдЧ рд╕рдордЭрддреЗ рд╣реИрдВ рдХрд┐ рдпрд╣ рдХрд╛рд░реНрдп рдХреИрд╕реЗ рд╣рд▓ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред
рд╡рд┐рдХрд┐рдкреАрдбрд┐рдпрд╛ рд╡рд┐рд╖рдп рдкрд░, рдорд╛рдорд▓реЗ рдкрд░ рдмрд╣реБрдд рд╕рдЦреНрддреА рд╕реЗ рд▓рд┐рдЦрддрд╛ рд╣реИ, рдФрд░ рдХреБрдЫ рднреА рдирд╣реАрдВ рд╕рдордЭрд╛рддрд╛ рд╣реИред рдЬреИрд╕реЗ, рдЗрд╕реЗ рдПрдХ рдЯреНрд░рд┐рдЬреНрдо рдХреЗ рд░реВрдк рдореЗрдВ рд▓реЗрдВред рдЗрд╕рд▓рд┐рдП, рдпрд╣ рд╕рдордЭрдирд╛ рдХрд┐ рдпрд╣ рдХреИрд╕реЗ рд╣рд▓ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ, рддреБрд░рдВрдд рдореБрд╢реНрдХрд┐рд▓ рд╣реИред рд▓реЗрдХрд┐рди рдХрд╛рд░реНрдп рдмрд╣реБрдд рд╕рд░рд▓ рд╣реИ, рдФрд░ рдЕрднреА рддрдХ рдкреНрд░реЛрдЧреНрд░рд╛рдорд┐рдВрдЧ рдФрд░ рдЧрдгрд┐рддреАрдп рд░реВрдк рд╕реЗ рджрд┐рд▓рдЪрд╕реНрдк рд╣реИред

рд▓реЗрдЦ рдореЗрдВ рдХрдИ рдЪрд┐рддреНрд░ рд╣реЛрдВрдЧреЗред рдХрд┐рд╕реА рд╕рдорд╕реНрдпрд╛ рдХреЛ рдкреБрдирд░рд╛рд╡рд░реНрддреА рд░реВрдк рд╕реЗ рдХреИрд╕реЗ рд╣рд▓ рдХрд░реЗрдВ рдФрд░ рдмрд╛рдЗрдирд░реА рдЦреЛрдЬ рджреНрд╡рд╛рд░рд╛ рдЗрд╕реЗ рдХреИрд╕реЗ рд╣рд▓ рдХрд┐рдпрд╛ рдЬрд╛рдП, рдЗрд╕рдХрд╛ рд╕реНрдкрд╖реНрдЯреАрдХрд░рдгред
рд╕рд╛рдорд╛рдиреНрдп рддреМрд░ рдкрд░, рд▓реЗрдЦ рдЙрди рдмрд╣рд╛рджреБрд░реЛрдВ рдХреЛ рд╕рдорд░реНрдкрд┐рдд рд╣реИ рдЬреЛ рдЕрднреА рднреА рд╣рдиреЛрдИ рдХреЗ рдЯреЙрд╡рд░ рд╕реЗ рдбрд░рддреЗ рд╣реИрдВ, рд▓реЗрдХрд┐рди рдЗрд╕рд╕реЗ рдбрд░рдирд╛ рдмрдВрдж рдХрд░рдирд╛ рдЪрд╛рд╣рддреЗ рд╣реИрдВред

рдЦреЗрд▓ рдХреЗ рдирд┐рдпрдо


рд╡реЗ рдмрд╣реБрдд рд╕рд░рд▓ рд╣реИрдВред рд╡рд┐рднрд┐рдиреНрди рдЖрдХрд╛рд░реЛрдВ рдХреЗ рдбрд┐рд╕реНрдХ рдХреЗ рд╕рд╛рде 1 рдкрд┐рд░рд╛рдорд┐рдб рд╣реИ, рдФрд░ 2 рдФрд░ рдЦрд╛рд▓реА рдкрд┐рд░рд╛рдорд┐рдб рд╣реИрдВред рдбрд┐рд╕реНрдХ рдХреЛ рдПрдХ рдкрд┐рд░рд╛рдорд┐рдб рд╕реЗ рджреВрд╕рд░реЗ рдореЗрдВ рд▓реЗ рдЬрд╛рдирд╛ рдЖрд╡рд╢реНрдпрдХ рд╣реИред рдЖрдк рдХреЗрд╡рд▓ рдкреНрд░рддрд┐ рдбреНрд░рд╛рдЗрд╡ рдПрдХ рдбреНрд░рд╛рдЗрд╡ рдХреЛ рд╕реНрдерд╛рдирд╛рдВрддрд░рд┐рдд рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред рдЧреБрдирд╛ рдбрд┐рд╕реНрдХ рдХреЗрд╡рд▓ рдЫреЛрдЯреЗ рд╕реЗ рдмрдбрд╝реЗ рд╣реЛ рд╕рдХрддреЗ рд╣реИрдВред
рддреЛ рд╣рдорд╛рд░реЗ рдкрд╛рд╕ рдПрдХ рдРрд╕рд╛ рдкрд┐рд░рд╛рдорд┐рдб рд╣реИ:
рдЫрд╡рд┐
рдФрд░ рд╣рдореЗрдВ рдордзреНрдп рдЕрдХреНрд╖ рдкрд░ рдХрд╣рдиреЗ рдХреЗ рд▓рд┐рдП рдЗрд╕реЗ рд╕реНрдерд╛рдирд╛рдВрддрд░рд┐рдд рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИред
рдпрджрд┐ рдЖрдк рд╢реБрд░реВ рд╕реЗ рд╣реА рдирд╣реАрдВ, рдмрд▓реНрдХрд┐ рдЕрдВрдд рд╕реЗ рдПрдХ рд╕рдорд╕реНрдпрд╛ рдХреЛ рд╣рд▓ рдХрд░рдирд╛ рд╢реБрд░реВ рдХрд░рддреЗ рд╣реИрдВ - рддреЛ рдпрд╣ рдмрд╣реБрдд рд╕рд░рд▓ рд╣реЛ рдЬрд╛рддрд╛ рд╣реИред рдЗрд╕реЗ рдЦрддреНрдо рдХрд░рдиреЗ рдХреА рд╕реЛрдЪрддреЗ рд╣реИрдВред рдкрд┐рд░рд╛рдорд┐рдб рдХреЛ рджреВрд╕рд░реА рдзреБрд░реА рдкрд░ рд╕реНрдерд╛рдирд╛рдВрддрд░рд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рд╣рдореЗрдВ рд╕рдмрд╕реЗ рдХрдо рдбрд┐рд╕реНрдХ рдХреЛ рд╕реНрдерд╛рдирд╛рдВрддрд░рд┐рдд рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ, рдФрд░ рдпрд╣ рдХреЗрд╡рд▓ рддрдм рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ рдЬрдм 4 рдКрдкрд░реА рдбрд┐рд╕реНрдХ рддреАрд╕рд░реЗ рдЕрдХреНрд╖ рдкрд░ рд╣реЛ:
рдЫрд╡рд┐
4 рдбрд┐рд╕реНрдХ рдХреЛ рддреАрд╕рд░реЗ рдЕрдХреНрд╖ рдкрд░ рд╕реНрдерд╛рдирд╛рдВрддрд░рд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рдЖрдкрдХреЛ рдЕрдирд┐рд╡рд╛рд░реНрдп рд░реВрдк рд╕реЗ рдПрдХ рд╣реА рд╕рдорд╕реНрдпрд╛ рдХреЛ рд╣рд▓ рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ, рд▓реЗрдХрд┐рди 4 рдбрд┐рд╕реНрдХ рдХреЗ рд▓рд┐рдПред рдЕрд░реНрдерд╛рддреН, рддреАрд╕рд░реА рдзреБрд░реА рдкрд░ рд╣рдо 4 рдбрд┐рд╕реНрдХ рдХреЛ рддрднреА рд╕реНрдерд╛рдирд╛рдВрддрд░рд┐рдд рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ рдЬрдм рд╣рдорд╛рд░реЗ рдкрд╛рд╕ рджреВрд╕рд░реА рдзреБрд░реА рдкрд░ 3 рдбрд┐рд╕реНрдХ рд╣реЛрдВ:
рдЫрд╡рд┐
рдкреБрдирд░рд╛рд╡реГрддреНрддрд┐ рдорд╣рд╕реВрд╕ рдХрд░рддреЗ рд╣реИрдВ?
5 рдбрд┐рд╕реНрдХ рдХреЗ рдвреЗрд░ рдХреЛ рдмрджрд▓рдирд╛ рд╣реИ:
1. рдПрдХ рд╕реНрд╡рддрдВрддреНрд░ рдЕрдХреНрд╖ рдкрд░ 4 рдбрд┐рд╕реНрдХ рдХреЗ рдвреЗрд░ рдХреЛ рд╕реНрдерд╛рдирд╛рдВрддрд░рд┐рдд рдХрд░рдирд╛
2. 5 рд╡реАрдВ рдбрд┐рд╕реНрдХ рдХреЛ рдЙрд╕ рдЕрдХреНрд╖ рдкрд░ рд╕реНрдерд╛рдирд╛рдВрддрд░рд┐рдд рдХрд░рдирд╛ рдЬрд┐рд╕рдХреА рд╣рдореЗрдВ рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ
3. 4 рдЕрдХреНрд╖ рдХреЗ рдПрдХ рдвреЗрд░ рдХрд╛ рд╕реНрдерд╛рдирд╛рдВрддрд░рдг рдЙрд╕ рдЕрдХреНрд╖ рдкрд░ рдХрд░рдирд╛ рдЪрд╛рд╣рд┐рдП рдЬрд┐рд╕рдХреА рд╣рдореЗрдВ рдЬрд╝рд░реВрд░рдд рд╣реИ

рдмрджрд▓реЗ рдореЗрдВ, 4 рдбрд┐рд╕реНрдХ рдХреЗ рдвреЗрд░ рдХреЛ рдмрджрд▓рдирд╛ рд╣реИ:
1. рдПрдХ рд╕реНрд╡рддрдВрддреНрд░ рдЕрдХреНрд╖ рдкрд░ 3 рдбрд┐рд╕реНрдХ рдХреЗ рдвреЗрд░ рдХреЛ рд╕реНрдерд╛рдирд╛рдВрддрд░рд┐рдд рдХрд░рдирд╛
2. 4 рдбреА рдбрд┐рд╕реНрдХ рдХреЛ рдЙрд╕ рдЕрдХреНрд╖ рдкрд░ рд╕реНрдерд╛рдирд╛рдВрддрд░рд┐рдд рдХрд░рдирд╛ рдЬреЛ рд╣рдореЗрдВ рдЪрд╛рд╣рд┐рдП
3. рдЕрдХреНрд╖ рдХреЗ рд▓рд┐рдП 3 рдбрд┐рд╕реНрдХреЛрдВ рдХрд╛ рдПрдХ рд╕реНрдЯреИрдХ рд╕реНрдерд╛рдирд╛рдВрддрд░рд┐рдд рдХрд░рдирд╛ рдЬреЛ рд╣рдореЗрдВ рдЪрд╛рд╣рд┐рдП

рд╡рд╣ рд╕рдм рд╣реИред

рдкреБрдирд░рд╛рд╡рд░реНрддреА рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди


рдЗрд╕ рддрд░рд╣ рдХреЗ рдПрдХ рд╡рд┐рд╕реНрддреГрдд рд╡рд┐рд╡рд░рдг рдХреЗ рдмрд╛рдж, рдЗрд╕ рдПрд▓реНрдЧреЛрд░рд┐рджрдо рдХреЛ рд▓рд╛рдЧреВ рдХрд░рдирд╛ рдореБрд╢реНрдХрд┐рд▓ рдирд╣реАрдВ рд╣реЛрдЧрд╛ред
рдбреЗрд▓реНрдлреА рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди
рдЗрд╕рд▓рд┐рдП рдореИрдВрдиреЗ рдмреБрд░реНрдЬ рдХреЗ рдкреНрд░рдХрд╛рд░реЛрдВ рдХреЗ рд╕рд╛рде рдПрдХ рдореЙрдбреНрдпреВрд▓ рдХрд╛ рд╡рд░реНрдгрди рдХрд┐рдпрд╛:
unit untHTypes; interface const MaxRingCount = 5; type TTower = record RingCount: Integer; Rings: array [0..MaxRingCount-1] of Integer; procedure MoveRing(var AtTower: TTower); end; TTowers = array [0..2] of TTower; procedure InitTowers(var towers: TTowers); implementation procedure InitTowers(var towers: TTowers); var i: Integer; begin towers[0].RingCount := MaxRingCount; towers[1].RingCount := 0; towers[2].RingCount := 0; for i := 0 to MaxRingCount - 1 do begin towers[0].Rings[i] := MaxRingCount - i; towers[1].Rings[i] := 0; towers[2].Rings[i] := 0; end; end; { TTower } procedure TTower.MoveRing(var AtTower: TTower); begin Assert(RingCount > 0); Assert(AtTower.RingCount - 1 < MaxRingCount); if AtTower.RingCount > 0 then Assert(Rings[RingCount - 1] < AtTower.Rings[AtTower.RingCount - 1]); Dec(RingCount); AtTower.Rings[AtTower.RingCount] := Rings[RingCount]; Rings[RingCount] := 0; Inc(AtTower.RingCount); end; end. 

TTower рдПрдХ рд╕рдВрд░рдЪрдирд╛ рд╣реИ рдЬреЛ рдПрдХ рдЯреЙрд╡рд░ рдХрд╛ рд╡рд░реНрдгрди рдХрд░рддреА рд╣реИред рдЗрд╕рдореЗрдВ, рд░рд┐рдВрдЧрдХрд╛рдЙрдВрдЯ рдЯрд╛рд╡рд░ рдкрд░ рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рддреИрдпрд╛рд░ рдХрд┐рдП рдЧрдП рдЫрд▓реНрд▓реЗ рдХреА рд╕рдВрдЦреНрдпрд╛ рдХреЛ рд╕рдВрдЧреНрд░рд╣реАрдд рдХрд░рддрд╛ рд╣реИред рд░рд┐рдВрдЧреЛрдВ рдХрд╛ рдЖрдХрд╛рд░ 1 рд╕реЗ рдореИрдХреНрд╕рд░рд┐рдВрдЧрдХрд╛рдЙрдВрдЯ рдХреЗ рд░рд┐рдВрдЧреНрд╕ рд╕рд░рдгреА рдореЗрдВ рд╕рдВрдЧреНрд░рд╣реАрдд рд╣реИред рдЪреВрдБрдХрд┐ рд╣рдорд╛рд░реЗ рдкрд╛рд╕ 3 рдЯрд╛рд╡рд░ рд╣реИрдВ, TTT рдЯрд╛рдЗрдк рдХреА TTowers = array [0..2] рдШреЛрд╖рд┐рдд рдХреА рдЧрдИ рдереА;
рдЗрд╕рдХреЗ рдЕрд▓рд╛рд╡рд╛, рдЯреЙрд╡рд░ рд╕реЗ, рдЖрдк MoveRing рдлрд╝рдВрдХреНрд╢рди рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдКрдкрд░реА рд░рд┐рдВрдЧ рдХреЛ рджреВрд╕рд░реЗ рдореЗрдВ рд╕реНрдерд╛рдирд╛рдВрддрд░рд┐рдд рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред рдлрд╝рдВрдХреНрд╢рди Assert-s рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рдСрдкрд░реЗрд╢рди рдХреА рд╢реБрджреНрдзрддрд╛ рдХреА рдЬрд╛рдВрдЪ рдХрд░рддрд╛ рд╣реИред
рдЯреЙрд╡рд░ рд╕рдорд╛рдзрд╛рди рд╕реНрд╡рдпрдВ рдкреНрд░реЛрдЬреЗрдХреНрдЯ рдлрд╝рд╛рдЗрд▓ рдореЗрдВ рд╣реИ:
 program Hanoy; {$APPTYPE CONSOLE} uses SysUtils, untHTypes in 'untHTypes.pas'; {$R *.res} procedure SolveHanoy; var towers: TTowers; function GetThirdIndex(index1, index2: Integer): Integer; //        begin //      Assert(index1 <> index2); case index1 of 0: if index2 = 1 then Result := 2 else Result := 1; 1: if index2 = 2 then Result := 0 else Result := 2; 2: if index2 = 0 then Result := 1 else Result := 0; else Assert(False,'wrong indeces'); end; end; procedure MoveStack(stacksize: Integer; fromindex, atindex: Integer); //         var thirdindex: Integer; begin if stacksize = 0 then Exit; thirdindex := GetThirdIndex(fromindex, atindex); //   MoveStack(stacksize - 1, fromindex, thirdindex); //  ( 1 )    towers[fromindex].MoveRing(towers[atindex]); //       WriteLn(fromindex,'-',atindex); //      MoveStack(stacksize - 1, thirdindex, atindex); //        end; begin InitTowers(towers); MoveStack(MaxRingCount, 0, 1); end; begin SolveHanoy; end. 



рдПрд▓реНрдЧреЛрд░рд┐рдердо рдЬрдЯрд┐рд▓рддрд╛


рд╣рдо рдЖрд╕рд╛рдиреА рд╕реЗ рдЧрдгрдирд╛ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ рдХрд┐ рдкрд┐рд░рд╛рдорд┐рдб рдХреЛ рд╕реНрдерд╛рдирд╛рдВрддрд░рд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рд╣рдореЗрдВ рдХрд┐рддрдиреА рдХреНрд░рд┐рдпрд╛рдУрдВ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИред
рдпрджрд┐ рд╣рдо рд╕реНрдЯреИрдХ рдХреЛ рдПрдХ рдбрд┐рд╕реНрдХ рд╕реЗ рд╕реНрдерд╛рдирд╛рдВрддрд░рд┐рдд рдХрд░рддреЗ рд╣реИрдВ, рддреЛ рд╣рдореЗрдВ 1 рдХрд╛рд░реНрд░рд╡рд╛рдИ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИред
рдпрджрд┐ рджреЛ рдХрд╛ рдвреЗрд░ рд╣реИ, рддреЛ 1 * 2 (рдПрдХ рдбрд┐рд╕реНрдХ рд╕реЗ рджреЛ рдмрд╛рд░ рд╕реНрдЯреИрдХ рд▓реЗ рдЬрд╛рдПрдБ) + 1 (рдЕрдВрддрд┐рдо рдбрд┐рд╕реНрдХ рдХреЛ рд╕реНрдерд╛рдирд╛рдВрддрд░рд┐рдд рдХрд░реЗрдВ)
рдпрджрд┐ рддреАрди рдореЗрдВ рд╕реЗ ((1 * 2) + 1) * 2 + 1
рдкрд╛рдБрдЪ рдореЗрдВ рд╕реЗ: (((((((1 * 2) + 1) * 2 + 1) * 2 + 1) * 2 + 1)
рддреЛ, рдкреНрд░рддреНрдпреЗрдХ рдСрдкрд░реЗрд╢рди рдЖрдВрджреЛрд▓рдиреЛрдВ рдХреЗ 2 рдЧреБрдирд╛ + 1 рдирдВрдмрд░ рд╕реЗ рдмрдврд╝рддрд╛ рд╣реИред N рд╕рдВрдЪрд╛рд▓рди рдХреЗ рд▓рд┐рдП рдХреЛрд╖реНрдардХ рдЦреЛрд▓рдирд╛ - рд╣рдореЗрдВ рдорд┐рд▓рддрд╛ рд╣реИ:
рдЫрд╡рд┐
рдЖрдк рд░рд╛рд╢рд┐ рд╕реЗ рдЫреБрдЯрдХрд╛рд░рд╛ рдкрд╛ рд╕рдХрддреЗ рд╣реИрдВ, рдХреНрдпреЛрдВрдХрд┐ рдпрд╣ рдЗрд╕рдХреЗ рдмрд░рд╛рдмрд░ рд╣реИ:
рдЫрд╡рд┐
рдкреА рдПрд╕ рдореИрдВ рдЕрдкрдиреЗ рд╕рд┐рд░ рдореЗрдВ рд░рд╛рд╢рд┐ рд╕реЗ рдЫреБрдЯрдХрд╛рд░рд╛ рдкрд╛ рд▓рд┐рдпрд╛, рдПрдХ рдЬреНрдпрд╛рдорд┐рддреАрдп рдкреНрд░рдЧрддрд┐ рдХреЛ рдХрдо рдХрд░рдиреЗ рд╡рд╛рд▓реЗ рд╕рджрд╕реНрдпреЛрдВ рдХреЗ рдпреЛрдЧ рдХреЛ рдпрд╛рдж рдХрд░рддреЗ рд╣реБрдП, рд▓реЗрдХрд┐рди рдореБрдЭреЗ рдЙрдореНрдореАрдж рд╣реИ рдХрд┐ рдЧрдгрд┐рддрдЬреНрдЮ рдпрд╣ рдмрддрд╛рдПрдВрдЧреЗ рдХрд┐ рдЗрди рдкрд░рд┐рд╡рд░реНрддрдиреЛрдВ рдХреЛ рд╕рд╣реА рдврдВрдЧ рд╕реЗ рдХреИрд╕реЗ рд▓рд┐рдЦрд╛ рдЬрд╛рдП
рдХреБрд▓ рдорд┐рд▓рд╛рдХрд░, рд╕рднреА рдкрд░рд┐рд╡рд░реНрддрдиреЛрдВ рдХреЗ рдмрд╛рдж, рдпрд╣ рдирд┐рдХрд▓рд╛:
рдЫрд╡рд┐

рдпрд╣реА рд╣реИ, рдЕрдЧрд░ рд╣рдо рдХреБрдЫ рдЕрдЬреАрдм рдЪрд╛рд╣рддреЗ рд╣реИрдВ, рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, 64 рдбрд┐рд╕реНрдХ рдХреЗ рд▓рд┐рдП рд╣рдиреЛрдИ рдХреЗ рдЯреЙрд╡рд░ рдХрд╛ рд╕рдорд╛рдзрд╛рди рд░рд┐рдХреЙрд░реНрдб рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рддреЛ рд╣рдорд╛рд░реЗ рдкрд╛рд╕ рдкрд░реНрдпрд╛рдкреНрдд рдЖрдзреБрдирд┐рдХ рднрдВрдбрд╛рд░рдг рдореАрдбрд┐рдпрд╛ рдирд╣реАрдВ рд╣реЛрдЧрд╛ред рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ, рд╣рдореЗрдВ рдХрд╣реАрдВ рднреА рдХреБрдЫ рднреА рд▓рд┐рдЦрдирд╛ рдирд╣реАрдВ рд╣реИред рдпрд╣ 0 рд╕реЗ + рдЕрдирдВрдд рддрдХ рд╕рднреА рд╕рдВрдЦреНрдпрд╛рдУрдВ рдХреЛ рд▓рд┐рдЦрдиреЗ рдХреЗ рд╕рдорд╛рди рд╣реИ, рддрд╛рдХрд┐ рдЖрдк рдЙрдиреНрд╣реЗрдВ рдмрд╛рдж рдореЗрдВ рдЙрдкрдпреЛрдЧ рдХрд░ рд╕рдХреЗрдВ, рдХреНрдпреЛрдВрдХрд┐ рд╣рдиреЛрдИ рдХреЗ рдЯреЙрд╡рд░ рдХрд╛ рд╕рдорд╛рдзрд╛рди рдПрдХ рднрдЧреНрди рд╣реИред

рднрдЧреНрди рдкреНрд░рдХреГрддрд┐


рд╣рд╛рдБ, рд╣рд╛рдБред рд╣рдиреЛрдИ рдХреЗ рдЯреЙрд╡рд░ рдХрд╛ рд╕рдорд╛рдзрд╛рди рдкреНрд░рдХреГрддрд┐ рдореЗрдВ рднрдЧреНрди рд╣реИред рдЖрдЗрдП рджреЗрдЦрддреЗ рд╣реИрдВред рдорд╛рди рд▓реЗрдВ рдХрд┐ рд╣рдорд╛рд░реЗ рдкрд╛рд╕ рдПрдХ рд╕реНрдЯреНрд░рд┐рдВрдЧ рдХреЛ рд▓рд┐рдЦреА рдЧрдИ рдкреНрд░рддреНрдпреЗрдХ рдХреНрд░рд┐рдпрд╛ рд╣реИред рдлрд┐рд░ 6 рдбрд┐рд╕реНрдХ рдХреЗ рдЯреЙрд╡рд░ рдХреЗ рд▓рд┐рдП, рдЖрдк рдЗрд╕реЗ рдХреБрдЫ рдЗрд╕ рддрд░рд╣ рд╕реЗ рд▓рд┐рдЦ рд╕рдХрддреЗ рд╣реИрдВ:
рдЫрд╡рд┐
рдЦреИрд░, рдЪреВрдВрдХрд┐ рдпрд╣ рдПрдХ рднрдЧреНрди рд╣реИ, рд╣рдо рдЖрд╕рд╛рдиреА рд╕реЗ рдХрд┐рд╕реА рднреА рдСрдкрд░реЗрд╢рди рдХреЛ рдХреЗрд╡рд▓ рдЙрд╕рдХреЗ рд╕реАрд░рд┐рдпрд▓ рдирдВрдмрд░ рдХреЛ рдЬрд╛рдирддреЗ рд╣реБрдП рдирд╛рдо рджреЗ рд╕рдХрддреЗ рд╣реИрдВред рдФрд░ рдЗрд╕рд╕реЗ рднреА рдЕрдзрд┐рдХ, рд╣рдо рдХрд┐рд╕реА рднреА рдСрдкрд░реЗрд╢рди рдХреЗ рд╕рдордп рд╕рднреА рдбрд┐рд╕реНрдХ рдХреА рд╕реНрдерд┐рддрд┐ рдХреЛ рдареАрдХ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред

рдмрд╛рдЗрдирд░реА рдПрд▓реНрдЧреЛрд░рд┐рджрдо


рдЗрд╕рд▓рд┐рдП, рд╣рдо рд╕рдВрдЪрд╛рд▓рди рдХреА рд╕рд╣реА рд╕рдВрдЦреНрдпрд╛ рдЬрд╛рдирддреЗ рд╣реИрдВ, рдФрд░ рд╣рдо рдЙрд╕ рдСрдкрд░реЗрд╢рди рдХреЗ рд╕реВрдЪрдХрд╛рдВрдХ рдХреЛ рднреА рдЬрд╛рдирддреЗ рд╣реИрдВ рдЬрд┐рд╕рдХреЗ рд▓рд┐рдП рд╣рдо рд░рд╛рдЬреНрдп рдХреЛ рдкреБрдирд░реНрд╕реНрдерд╛рдкрд┐рдд рдХрд░рдирд╛ рдЪрд╛рд╣рддреЗ рд╣реИрдВред
рдорд╛рди рд▓реЗрдВ рдХрд┐ рд╣рдорд╛рд░реЗ рдкрд╛рд╕ 6 рдбрд┐рд╕реНрдХ рдХрд╛ рдЯреЙрд╡рд░ рд╣реИ (рд╣рдо рд╣рдореЗрд╢рд╛ рдХреА рддрд░рд╣, 1 рд╕реЗ рдордзреНрдп рдЕрдХреНрд╖ рддрдХ рдЪрд▓рддреЗ рд╣реИрдВ), рдЬрд┐рд╕рдХрд╛ рдорддрд▓рдм рд╣реИ рдХрд┐ рд╣рдорд╛рд░реЗ рдкрд╛рд╕ 2 ^ 6-1 = 63 рдСрдкрд░реЗрд╢рди рд╣реИрдВред рдорд╛рди рд▓реАрдЬрд┐рдП рдХрд┐ рд╣рдореЗрдВ 49 рд╡реЗрдВ рдСрдкрд░реЗрд╢рди рдХреЗ рд▓рд┐рдП рд░рд╛рдЬреНрдп рдХреЛ рдкреБрдирд░реНрд╕реНрдерд╛рдкрд┐рдд рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИред
рдкреВрд░реНрдгрд╛рдВрдХ 63 рдХреЛ 2 рд╕реЗ рд╡рд┐рднрд╛рдЬрд┐рдд рдХрд░реЗрдВред рдпрд╣ 31 рдХреЛ рдмрджрд▓ рдЬрд╛рддрд╛ рд╣реИред рдпрд╣ рдСрдкрд░реЗрд╢рди рдХрд╛ рд╕реВрдЪрдХрд╛рдВрдХ рд╣реИ рдЬрд┐рд╕ рдкрд░ 6 рд╡реАрдВ рдбрд┐рд╕реНрдХ рдХреЛ рд╕реНрдерд╛рдирд╛рдВрддрд░рд┐рдд рдХрд┐рдпрд╛ рдЬрд╛рдПрдЧрд╛:
рдЫрд╡рд┐
рд╣рдорд╛рд░реЗ рдкрд╛рд╕ 49 рд╡рд╛рдБ рд╕рдВрдЪрд╛рд▓рди рд╕реВрдЪрдХрд╛рдВрдХ рд╣реИред рдЗрд╕рдХрд╛ рдорддрд▓рдм рд╣реИ рдХрд┐ 6 рд╡реАрдВ рдбрд┐рд╕реНрдХ рдкрд╣рд▓реЗ рд╕реЗ рд╣реА рдордзреНрдп рдЕрдХреНрд╖ рдкрд░ рд╕реНрдерд┐рдд рд╣реИред рдЗрд╕рдХреЗ рдЕрд▓рд╛рд╡рд╛, рдЪреВрдВрдХрд┐ рд╣рдо рджрд╛рдИрдВ рдУрд░ рд╣реИрдВ, рдкрд╛рдВрдЪрд╡реАрдВ рдбрд┐рд╕реНрдХ рдпрд╛ рддреЛ 3 рдЕрдХреНрд╖ рдкрд░ рдпрд╛ 2 рдкрд░ рд╕реНрдерд┐рдд рд╣реИред рд╣рдореЗрдВ рдЙрд╕реА рдПрд▓реНрдЧреЛрд░рд┐рджрдо рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдЯреЙрд╡рд░ рдХреЗ рд╕рд╛рде рдХрд╛рдо рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рд╣рдо 49 рд╡реЗрдВ рдСрдкрд░реЗрд╢рди рд╕реЗ 32 рдХреЛ рдШрдЯрд╛рддреЗ рд╣реИрдВ рдФрд░ рд╕рдмрдСрдкрд░реЗрд╢рди рдЗрдВрдбреЗрдХреНрд╕ рдкрд╛рддреЗ рд╣реИрдВред рдпрд╣ 17 рд╣реИред 5 рдбрд┐рд╕реНрдХ рдХреЗ рдвреЗрд░ рдХреЛ рд╕реНрдерд╛рдирд╛рдВрддрд░рд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, 31 рдСрдкрд░реЗрд╢рди рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реЛрддреА рд╣реИ, 5 рд╡реАрдВ рдбрд┐рд╕реНрдХ 16 рд╡реЗрдВ рдСрдкрд░реЗрд╢рди рдореЗрдВ рдФрд░ 3 рдЕрдХреНрд╖ рд╕реЗ 2 рд╡реЗрдВ рддрдХ рдЪрд▓рддреА рд╣реИред
рддреЛ рд╕рдВрдЦреНрдпрд╛ 17 рд╕рд╣реА рд╣реИ:
рдЫрд╡рд┐
рдФрд░ рдЗрд╕рдХрд╛ рдорддрд▓рдм рд╣реИ рдХрд┐ рдбреНрд░рд╛рдЗрд╡ 5 рдкрд╣рд▓реЗ рд╕реЗ рд╣реА рджреВрд╕рд░реЗ рдЕрдХреНрд╖ рдкрд░ рд▓реЗ рдЬрд╛рдпрд╛ рдЧрдпрд╛ рд╣реИред
рд╕рд╛рджреГрд╢реНрдп рджреНрд╡рд╛рд░рд╛, рд╣рдо рд╢реЗрд╖ рдбрд┐рд╕реНрдХ рдХреА рд╕реНрдерд┐рддрд┐ рдХреЛ рдкреБрдирд░реНрд╕реНрдерд╛рдкрд┐рдд рдХрд░рддреЗ рд╣реИрдВред

рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди (рджреНрд╡рд┐рдЖрдзрд╛рд░реА рддрд░реАрдХрд╛)


рдореИрдВрдиреЗ рдмреБрд░реНрдЬ рдХрд╛ рдПрдХ рд╕реБрдВрджрд░ рдкреНрд░рддрд┐рдкрд╛рджрди рдЬреЛрдбрд╝рд╛ред рд╕рд╣рдорддрд┐ рджреЗрдВ, рдХрдВрд╕реЛрд▓ рд▓реЙрдЧ рдХреЛ рджреЗрдЦрдирд╛ рдЙрдмрд╛рдК рд╣реИред рдЗрд╕рд▓рд┐рдП, рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рдмрдврд╝ рдЧрдпрд╛ рд╣реИ, рдФрд░ рдореИрдВ рд▓реЗрдЦ рдХреЗ рдЕрдВрдд рдореЗрдВ рдкреВрд░реНрдг рдкрд░рд┐рдпреЛрдЬрдирд╛ (рд╕реНрд░реЛрдд + рдмрд╛рдЗрдирд░реА) рд╕рдВрд▓рдЧреНрди рдХрд░реВрдВрдЧрд╛ред рдореИрдВ рддреБрдореНрд╣реЗрдВ рдпрд╣рд╛рдБ рджреВрдВрдЧрд╛
рдбреЗрд▓реНрдлреА рдореЗрдВ рдкреБрдирд░рд╛рд╡рд░реНрддреА рдлрд╝рдВрдХреНрд╢рди рдХреЛрдб
 procedure TfrmView.RestoreDisk(size, actionIndex, actionCount, fromAxe, atAxe: Integer); var pivot: Integer; i: Integer; thirdAxe: Integer; begin pivot := actionCount div 2; thirdAxe := GetThirdIndex(fromAxe, atAxe); if actionIndex = pivot then //  ,       begin //       .   FTowers[fromAxe].PutRing(size); for i := size - 1 downto 1 do FTowers[thirdAxe].PutRing(i); FAction.FromIndex := fromAxe; FAction.AtIndex := atAxe; end else if actionIndex < pivot then begin //        FTowers[fromAxe].PutRing(size); //      RestoreDisk(size - 1, actionIndex, actionCount - pivot - 1, fromAxe, thirdAxe); end else begin //          FTowers[atAxe].PutRing(size); //     RestoreDisk(size - 1, actionIndex - pivot - 1, actionCount - pivot - 1, thirdAxe, atAxe); end; end; procedure TfrmView.RestoreTowers; var index: Integer; begin ClearTowers(FTowers); index := tbOperation.Position; RestoreDisk(MaxRingCount, index, 2 shl (MaxRingCount - 1) - 1, 0, 1); Invalidate; end; 



рд╕реАрд░рдкрд┐рдиреНрд╕реНрдХреА рдЯреНрд░рд╛рдпрдВрдЧрд▓


рдореИрдВ рдПрдХ рджрд┐рд▓рдЪрд╕реНрдк рд╡рд┐рд╢реЗрд╖рддрд╛ рдХреЛ рдкрд╛рд░рд┐рдд рдХрд░рдиреЗ рдореЗрдВ рдЙрд▓реНрд▓реЗрдЦ рдХрд░рдирд╛ рдЪрд╛рд╣реВрдВрдЧрд╛ред рдпрджрд┐ рд░рд┐рдВрдЧ рдХреЗ рд╕рднреА рд╕рдВрднрд╛рд╡рд┐рдд рдЖрдВрджреЛрд▓рдиреЛрдВ рдХреЛ рдПрдХ рдЧреНрд░рд╛рдл рдореЗрдВ рдПрдХрддреНрд░ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ, рддреЛ рдкреНрд░рддреНрдпреЗрдХ рдиреЛрдб рдХреЗ рд▓рд┐рдП рд╕рдмрд╕реЗ рдЕрдзрд┐рдХ рдмрд╛рд░ 3 рдХрдиреЗрдХреНрд╢рди рд╣реЛрдВрдЧреЗред рд╕рднреА рдиреЛрдбреНрд╕ рдФрд░ рдХрдиреЗрдХреНрд╢рди рдХреЛ рддреНрд░рд┐рдХреЛрдг рдХреЗ рдЖрдХрд╛рд░ рдореЗрдВ рдЕрдЪреНрдЫреА рддрд░рд╣ рд╕реЗ рд╡реНрдпрд╡рд╕реНрдерд┐рдд рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИред Sierpinski рддреНрд░рд┐рдХреЛрдг:
рдЫрд╡рд┐
рд╡рд┐рдХрд┐рдкреАрдбрд┐рдпрд╛ рдкрд░ рдЗрд╕рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдпрд╣рд╛рдБ рдФрд░ рдЕрдзрд┐рдХ рдкрдврд╝реЗрдВред рдЬреЛ рд╕рд╛рдорд╛рдиреНрдп рд░реВрдк рд╕реЗ рдЖрд╢реНрдЪрд░реНрдп рдХреА рдмрд╛рдд рдирд╣реАрдВ рд╣реИ, рдХреНрдпреЛрдВрдХрд┐ рд╣рдо рдкрд╣рд▓реЗ рд╕реЗ рд╣реА рд╕рдорд╛рдзрд╛рди рдХреЗ рднрдЧреНрди рдкреНрд░рдХреГрддрд┐ рдХреЛ рдЬрд╛рдирддреЗ рд╣реИрдВ;)

рдХреБрд▓ рдорд┐рд▓рд╛рдХрд░


рдореИрдВрдиреЗ рджрд┐рдЦрд╛рдиреЗ рдХреА рдХреЛрд╢рд┐рд╢ рдХреА рдХрд┐ рдХрднреА-рдХрднреА рдРрд╕рд╛ рдХреИрд╕реЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдПрдХ рдкреНрд░рддреАрдд рд╣реЛрддрд╛ рд╣реИ рдХрд┐ рдкреВрд░реА рддрд░рд╣ рд╕реЗ рд╕реНрдкрд╖реНрдЯ рдХрд╛рд░реНрдп рд╣рд▓ рдирд╣реАрдВ рд╣реЛ рд╕рдХрддрд╛ рд╣реИред рдЗрд╕рдХреЗ рдЕрд▓рд╛рд╡рд╛, рд╕рд╛рд╡рдзрд╛рдиреАрдкреВрд░реНрд╡рдХ рдЕрдзреНрдпрдпрди рдХреЗ рд╕рд╛рде, рдЖрдк рдЕрдЪрд╛рдирдХ рд╕рдорд╕реНрдпрд╛ рдХреЛ рд╣рд▓ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдкреВрд░реА рддрд░рд╣ рд╕реЗ рдЕрд▓рдЧ рджрд┐рд▓рдЪрд╕реНрдк рдПрд▓реНрдЧреЛрд░рд┐рджрдо рдХреА рдЦреЛрдЬ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ, рдЬреЛ рдирдИ рд╕рдВрднрд╛рд╡рдирд╛рдУрдВ рдХреЛ рдЦреЛрд▓рддреЗ рд╣реИрдВред рд╡рд┐рднрд┐рдиреНрди рджреГрд╖реНрдЯрд┐рдХреЛрдгреЛрдВ рдХреЗ рд▓рд┐рдП рджреЗрдЦреЗрдВ, рдкреНрд░рдпреЛрдЧ рдХрд░реЗрдВ, рд╡рд┐рд╢реНрд▓реЗрд╖рдг рдХрд░реЗрдВред рдЖрдЦрд┐рд░рдХрд╛рд░, рд╣рдо рдкреНрд░реЛрдЧреНрд░рд╛рдорд░ рд╣реИрдВред
рдЬреЛ рд▓реЛрдЧ рдкрдврд╝рддреЗ рд╣реИрдВ, рдФрд░ рдЬрд┐рдиреНрд╣реЛрдВрдиреЗ рд▓реЗрдЦ рдкрд╕рдВрдж рдХрд┐рдпрд╛, рдЙрдирдХреЗ рд▓рд┐рдП рдзрдиреНрдпрд╡рд╛рджред рдореИрдВ рдПрдХ рдбреЗрдореЛ рдЙрджрд╛рд╣рд░рдг рд╕рдВрд▓рдЧреНрди рдХрд░рддрд╛ рд╣реВрдВ рдЬрд┐рд╕рдореЗрдВ рдЖрдк рдЯреНрд░реИрдХрдмрд╛рд░ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ рдФрд░ рдпрд╣ рджреЗрдЦ рд╕рдХрддреЗ рд╣реИрдВ рдХрд┐ рдмреБрд░реНрдЬ рдХреЛ рдХреИрд╕реЗ рд╕реНрдерд╛рдирд╛рдВрддрд░рд┐рдд рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИред

рдЙрджрд╛рд╣рд░рдг рдмрд╛рдЗрдирд░реА рдПрд▓реНрдЧреЛрд░рд┐рдереНрдо (exe + рд╕реНрд░реЛрдд рдХреЛрдб, рдбреЗрд▓реНрдлреА)

Source: https://habr.com/ru/post/In200758/


All Articles