• Antonio (29.03.08 13:05) [0]
    Вроде просто а как лучше незнаю
    Определить, сколько четырехзначных чисел делится на 13 и при этом не делится на 2, 3 и 5.
  • <code> (29.03.08 13:13) [1]

    procedure TForm1.FormCreate(Sender: TObject);
    var i,k:integer;
    begin
     k:=0;
     for i:=1000 to 9999 do
     begin
       if (i mod 13 = 0) AND (i mod 2 <> 0) AND (i mod 3 <> 0)AND (i mod 5 <> 0) then k:=k+1;
     end;
     Caption:=IntToStr(k);
    end;

  • Palladin © (29.03.08 14:09) [2]

    TForm1.FormCreate(Sender: TObject);
    var i,k,n:integer;
    begin
     k:=0;
     for i:=0 to 346 do
     begin
       n:=i*2+77;
       if  ((n mod 3)<>0) and ((n mod 5)<>0) then inc(k);
     end;
     Caption:=IntToStr(k);
    end;

  • korneley © (29.03.08 15:33) [3]
    Если уж извращаться, то по-полной :)

    function GetSpecCount(Start, Stop: integer): integer;
    var i, n, sum, ThousandCnt, Last3Fig:integer;
       s : string;
    begin
     Result := 0;
     if Stop >= Start then begin
       for i := Start to Stop do
       begin
         s := inttostr(i);
         sum := 0;
         for n := 1 to length(s) do
           sum := sum + {strtoint(s[n]);// или + }ord(s[n]) - $30;
         case length(s) of
         1..3:
           begin
             ThousandCnt := 0;
             Last3Fig := strtoint(s);
           end;
         else
           ThousandCnt := strtoint(copy(s, 1, length(s) - 3));
           Last3Fig := strtoint(copy(s, length(s) - 2, 3));
         end;
         if (((ThousandCnt - Last3Fig) mod 13) = 0)
            and ((strtoint(copy(s, length(s), 1)) mod 2) <> 0)
            and ((sum mod 3) <> 0)
            and (copy(s, length(s), 1) <> '0')
            and (copy(s, length(s), 1) <> '5')
         then Result := Result + 1;
       end;
     end;
    end;


    Зато всегда доказать можно, что знакомы, стало быть, с признаками делимости ;)
  • MBo © (29.03.08 15:40) [4]

    var
     i, Cnt: Integer;
    begin
     Cnt := 0;
     i := ((1000 + 25) div 26) * 26 - 13;
     if i < 1000 then
       i := i + 26;
     while i < 10000 do begin
       if ((i mod 3) <> 0) and ((i mod 5) <> 0) then
         Inc(Cnt);
       i := i + 26;
     end;
     Caption := IntToStr(Cnt);



    P.S. Задачу можно решить и без циклов.
  • Alien1769 © (29.03.08 15:45) [5]

    > P.S. Задачу можно решить и без циклов.

    На уровне машинных кодов не получится :))
Есть новые Нет новых   [134433   +21][b:0][p:0.002]