考试随机抽题问题:
在MS SQL Server 数据库中有一个题库,每次考试时要随机抽40道题,我的解决方案是
用两个数组,一个是动态分配的,一个放随机抽的题。题库中的编号放在动态数组中,然后从动态数组里面抽题,放到另一个数组中,但是可能会有重复的数据,我该怎样避免这个问题!
或者谁有更好的解决方案!
Thank a lots
在MS SQL Server 数据库中有一个题库,每次考试时要随机抽40道题,我的解决方案是
用两个数组,一个是动态分配的,一个放随机抽的题。题库中的编号放在动态数组中,然后从动态数组里面抽题,放到另一个数组中,但是可能会有重复的数据,我该怎样避免这个问题!
或者谁有更好的解决方案!
Thank a lots
大家看:Dsj: Array of String;
DKT[0..39] : Array of String;setLength(Dsj,Query1.RecordCount);
for i:=0 to Query1.RecordCount-1 do
begin
Dsj[i]:=Query1.Fields[0].Asstring;
end;
for i:=0 to 39 do
begin
Dkt[i]:=Dsj[Random(Query1.RecordCount)];
end;这样的话Dkt数组中会有重复的数据。
可以检测Dkt数组中的重复数据,但会太慢...
怎么办....
然后再定义a2[0....x]x为你要选取择多少个随机数的多少。
你先随机的从a1[0..100]选取一个数。`。将这个值付给a2[0]再将这个数从a1[0..100]从删除
后面的数向前移。这样下去就可以了。
这样可以避免第一位朋友那样说的。如10个数中选9个。可以永远都得不到最后那一个数。
var
int OldRadomNum;
int NowRadomNum;
OldRAdomNum = -1;
for i:=0 to 39 do
begin
do
begin
NowRAdomNum = Random(Query1.RecordCount);
end while(NowRadomNum = OldRadomNum);
Dkt[i]:=Dsj[NowRadomNum];
OldRadomNum = NowRadomNum;
end;