看板 Fortran 關於我們 聯絡資訊
※ 引述《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
latinboy: 可以用 但是效率驚人.... 04/16 20:56
laa7352:效率驚人的意思是? 04/16 22:32
※ 編輯: laa7352 來自: 59.112.236.12 (04/16 23:04)