Re: [問題] 20個人中隨機抽取10個人
※ 引述《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
→
04/16 20:56, , 1F
04/16 20:56, 1F
→
04/16 22:32, , 2F
04/16 22:32, 2F
※ 編輯: laa7352 來自: 59.112.236.12 (04/16 23:04)
討論串 (同標題文章)
本文引述了以下文章的的內容:
完整討論串 (本文為第 2 之 4 篇):
Fortran 近期熱門文章
PTT數位生活區 即時熱門文章