作者laa7352 (Laa)
看板Fortran
标题Re: [问题] 20个人中随机抽取10个人
时间Sun Apr 11 20:45:13 2010
※ 引述《janewinnie (逃离)》之铭言:
: 我的问题是 如果我想在20个人中随机抽取10人
: 要怎麽写程式呢?
: 我有想到
: do i=1,20,1
: call random_number(ran)
: if (ran <= 10/20 .and. count<20) then
: item(i)=1 !表示被抽取
: count=count+1
: endif
: end do
: 这样是用机率的方式去抽,而且保证不会超过10位,
: 但我是要抽取”切确的10位”,机率的方式可能其实抽取不到10位。
: 请问还有更好的方法吗?
: 相同的也可以套用在1000人中随机抽取30位
: 或是10000人中随机抽取350位
试试看~
program test102
integer (m=350,nt=10) ! m是总人数,nt是随机抽取次数
integer m1(m),m2(m),i,j,nn,am,nt
real ran
nn=m !用nn暂代总人数
do i=1,m
m1(i)=i !先把m1阵列,对应维度丢值进去
enddo !例如 m1(1)=1
m2=m1 !再用m2去做抽取次数
call random_seed()
do i=1,nt
call random_number(ran)!因为乱数是0~1,所以乱数出来後乘上总人数
ran=ran*nn !再令其为整数,就可以直接抓到某编号
am=ran
+1
print*, i,m2(am) !print再萤幕上,次数及抽到的人
do j=am,nn-1 !这边是把抽到的人抓出来,把从面的人编号
m2(j)=m2(j+1) !往前递补
enddo
nn=nn-1 !每抽一次,剩余人数就减 1
enddo
stop
end
--
※ 发信站: 批踢踢实业坊(ptt.cc)
◆ From: 61.231.21.196
1F:→ latinboy: 可以用 但是效率惊人.... 04/16 20:56
2F:→ laa7352:效率惊人的意思是? 04/16 22:32
※ 编辑: laa7352 来自: 59.112.236.12 (04/16 23:04)