Ask Question

Name:
Title:
Your Question:

Answer Question

Name:
Your Answer:
User Submitted Source Code!


Description:
  1
Language: PASCAL
Code:
var n , i , am : longint;
    a , res : array[1..1000000] of longint;
 
begin
    read(n);
    a[1] := 0;
    for i := 2 to n do
        a[i] := maxint;
    for i := 2 to n do begin
        if a[i] > a[i - 1] + 1 then
            a[i] := a[i - 1] + 1;
        if i mod 2 = 0 then
            if a[i] > a[i div 2] + 1 then
                a[i] := a[i div 2] + 1;
        if i mod 3 = 0 then
            if a[i] > a[i div 3] + 1 then
                a[i] := a[i div 3] + 1;
    end;    
    writeln(a[n]);
    am := 0;
    i := n;
    while i <> 1 do begin
        inc(am);
        if (i mod 3 = 0) and (a[i div 3] + 1 = a[i]) then begin
                res[am] := 3;
                i := i div 3;
        end else if (i mod 2 = 0) and (a[i div 2] + 1 = a[i]) then begin
                res[am] := 2;
                i := i div 2;
        end else begin
            res[am] := 1;
            i := i - 1;
        end;                        
    end;
    for i := am downto 1 do
        writeln(res[i]);
end.
Comments: