[問題]產生不重複的1~16隨機排列

看板C_and_CPP (C/C++)作者 (尖頭鰻)時間15年前 (2010/10/05 11:39), 編輯推噓1(1020)
留言21則, 6人參與, 最新討論串1/1
我是寫嵌入式的... 所以有些C函式不能用.... 大概寫一下我的運作程式碼 INT32U i,j,a[16],array[4][4],DD[]={218,308,404,497,120,210,300,390}; while(1) { srand(rand()); for(i=0;i<16;i++) { ran: a[i]=1+rand()%16; 產生1~16的隨機亂數 for(j=0;j<i+1;j++)檢查是否重複 { if(i==0)只有一個數時不用檢查 break; if(a[i]==a[j])如果重複...隨機亂數重新產生 goto ran; } array[i/4][i%4] = a[i];array裡是把1~16的隨機數放到4*4的矩陣 } } 但是我這樣寫跑不出一個結果 請問我有哪邊錯誤了嗎@@? -- ※ 發信站: 批踢踢實業坊(ptt.cc) ◆ From: 122.127.113.74

10/05 11:41, , 1F
一個是ran,一個是ram,goto不到@@"
10/05 11:41, 1F

10/05 11:43, , 2F
不好意思...我在這邊打錯了....但實際上兩個都是打n
10/05 11:43, 2F
※ 編輯: SuperEel 來自: 122.127.113.74 (10/05 11:44)

10/05 11:44, , 3F
把j<i+1改成j<i
10/05 11:44, 3F

10/05 11:47, , 4F
呃 對於產生這種亂數的方式 可以先開一個16格的array
10/05 11:47, 4F

10/05 11:48, , 5F
謝謝TsinTa大大....改完後剛好可以了^^
10/05 11:48, 5F

10/05 11:49, , 6F
然後把1~16照順序放進去 接著randomly swap一段時間
10/05 11:49, 6F

10/05 11:49, , 7F
不客氣,不過這樣產生亂數似乎不太有效率XD
10/05 11:49, 7F

10/05 11:50, , 8F
就應該可以拿到想要的結果?
10/05 11:50, 8F

10/05 11:59, , 9F
嵌入式的好像不能用randomly swap...\
10/05 11:59, 9F

10/05 11:59, , 10F
因為time也不能用@@"
10/05 11:59, 10F

10/05 12:00, , 11F
TsinTa大大有什麼建議嗎@@???
10/05 12:00, 11F

10/05 12:05, , 12F
randomly swap 跟 time 能不能用...有關係嗎 XD
10/05 12:05, 12F

10/05 12:31, , 13F
srand 跟 rand 都在用了你還不能 shuffle 他嗎? = ="
10/05 12:31, 13F

10/05 12:32, , 14F
我主要想說的是...很多函式都不能用...
10/05 12:32, 14F

10/05 12:34, , 15F
我想你對 randomly swap 有誤會 它應該只會用到 rand()
10/05 12:34, 15F

10/05 12:40, , 16F
10/05 12:40, 16F

10/05 12:40, , 17F
產生16個不重覆的數字,簡單又快速
10/05 12:40, 17F

10/05 12:41, , 18F
XD
10/05 12:41, 18F

10/05 13:15, , 19F
喔...感謝james732大大的分享
10/05 13:15, 19F

10/05 13:59, , 20F
可以用break 何必用goto
10/05 13:59, 20F

10/05 14:00, , 21F
喔!看錯 原來你要重選
10/05 14:00, 21F
文章代碼(AID): #1CgftwLR (C_and_CPP)
文章代碼(AID): #1CgftwLR (C_and_CPP)