пятница, 16 августа 2013 г.

35. Спичечные треугольники

prb35Профессор Самоделкин, известный Вам по задаче "Спичечная модель", решил вновь проявить свои умственные способности. Он начал складывать треугольники со спичек.
   Какое минимальное количество спичек необходимо Самоделкину, чтобы выложить N треугольников, у которых каждая сторона одна спичка?

Код решения:
*****
var i, a, n, s:int64;
   j, t:longint;
procedure out;
begin
       writeln (s);
       halt;
end;
begin
       readln (n);
       if n<1 then begin writeln (0); halt; end;
       i:=1; a:=0;
       while a<n do
       begin
            a:=6*i*i;
            inc(i);
       end;
       i:=i-1;
       if i=1 then
                        case n of
                        1: begin s:=3; out; end;
                        2: begin s:=5; out; end;
                        3: begin s:=7; out; end;
                        4: begin s:=9; out; end;
                        5: begin s:=11; out; end;
                        6: begin s:=12; out; end;
                        end;
       if i=2 then
                        case n of
                        7: begin s:=14; out; end;
                        8: begin s:=16; out; end;
                        9: begin s:=18; out; end;
                        10: begin s:=19; out; end;
                        11: begin s:=21; out; end;
                        12: begin s:=23; out; end;
                        13: begin s:=24; out; end;
                        14: begin s:=26; out; end;
                        15: begin s:=28; out; end;
                        16: begin s:=29; out; end;
                        17: begin s:=31; out; end;
                        18: begin s:=33; out; end;
                        19: begin s:=34; out; end;
                        20: begin s:=36; out; end;
                        21: begin s:=38; out; end;
                        22: begin s:=39; out; end;
                        23: begin s:=41; out; end;
                        24: begin s:=42; out; end;
                        end;
       s:=0; a:=12;
       for j:=1 to i-1 do
       begin
            s:=s+a;
            a:=a+18;
       end;
       n:=n-6*(i-1)*(i-1);
       if n>1 then begin s:=s+2; n:=n-1; end;
       for j:=1 to i-2 do
       begin
            if n>0 then begin s:=s+2; n:=n-1; end;
            if n=0 then break;
            if n>0 then begin s:=s+1; n:=n-1; end;
            if n=0 then break;
       end;
       for t:=1 to 5 do
       begin
            if n>0 then begin s:=s+2; n:=n-1; end;
            if n=0 then break;
            for j:=1 to i-1 do
            begin
              if n>0 then begin s:=s+2; n:=n-1; end;
              if n=0 then break;
              if n>0 then begin s:=s+1; n:=n-1; end;
              if n=0 then break;
            end;
            if n=0 then break;
       end;
       if n>0 then begin s:=s+2; n:=n-1; end;
       if n=0 then out;
       if n>0 then begin s:=s+1; n:=n-1; end;
       if n=0 then out;
end.


*****

1 комментарий: