Re: [問題] 20個人中隨機抽取10個人

看板Fortran作者 (Laa)時間14年前 (2010/04/11 20:45), 編輯推噓0(002)
留言2則, 2人參與, 最新討論串2/4 (看更多)
※ 引述《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)
文章代碼(AID): #1BmSHTZC (Fortran)
文章代碼(AID): #1BmSHTZC (Fortran)