-
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; -
Если уж извращаться, то по-полной :)
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. Задачу можно решить и без циклов.
На уровне машинных кодов не получится :))