program Project1;
{$APPTYPE CONSOLE}
uses
SysUtils;
type
Tset=set of 1..90;
Tarr=array[1..sizeof(tset)] of byte;
var i:integer;
s:tset;
count:integer=0;
begin
s:=[12,34,56,1,4,3,6,76,45];
for i:=1 to sizeof(tset) do
while tarr(s)<>0 do
begin
count:=count+tarr(s) and 1;
tarr(s):=tarr(s) shr 1;
end;
write(count);
end.
其中tset越小速度越快,当sizeof(tset)=4时 tarr可以用 longint 代,for循环可以省去
这是我想到的最快的算法了