Re: [問題] 亂數產生座標

看板C_and_CPP作者 (human)時間14年前 (2011/05/18 14:55), 編輯推噓0(0010)
留言10則, 5人參與, 最新討論串2/2 (看更多)
※ 引述《sanabear (發憤圖強的熊小天 .__./)》之銘言: : 想用亂數取得不重複的N組(x,y)座標, : 可是有時候還是會出現重複的組合 : 想請問板上的各位,下面的程式碼哪裡有問題呢? : 謝謝 : #include <iostream> : #include <cstdlib> : #include <ctime> : #define n 20 //N個點 : using namespace std; : void finddata(); : int main() : { : int i,j,x[n],y[n],g[n],h[n],k,m; : srand(time(NULL)); : finddata(); : system("pause"); : return 0; : } : void finddata() : { : int i,j,x[n],y[n],g[n],h[n],k,m; : cout<<"-------------檢查前---------------\n"; //產生N點xy座標 : for(i=0;i<n;i++) : { : x[i]=rand()%5; : y[i]=rand()%5; : g[i]=x[i]; : h[i]=y[i]; : cout<<x[i]<<","<<y[i]<<"\t"; : } : cout<<"\n-------------檢查後---------------\n";//確認產生的N點沒有重複的XY : 組合 : for(i=1;i<n;i++) : { : for(j=0;j<i;j++) : { : while((x[i]==g[j])&&(y[i]==h[j])) : { : x[i]=rand()%5; : y[i]=rand()%5; : } : } : } : for(i=0;i<n;i++) : { : cout<<x[i]<<","<<y[i]<<"\t"; : } : } 可以用洗牌的原理來防止重複,因為我之前也做過類似的動作,不論怎麼給予新值,還是有重複可能 ex: #include <iostream> #include <cstdlib> #include <ctime> #define n 20 //N個點 void swap(int *val , int *val2) { int temp = 0; temp = *val; *val = *val2; *val2 = temp; } void Rand(int * ptr , int number) { for (int i = 0 ; i < number ; ++i) { swap(&ptr[i % n],&ptr[(rand() + i) % n]); } } int main() { int array[n] = {0}; for (int i = 0 ; i < n ; ++i) { array[i] = i + 1; } Rand(array,100); return 0; } -- ※ 發信站: 批踢踢實業坊(ptt.cc) ◆ From: 61.220.204.217

05/18 14:57, , 1F
std::swap 表示:
05/18 14:57, 1F

05/18 15:10, , 2F
版主,自己寫的swap也要std::swap?
05/18 15:10, 2F

05/18 15:21, , 3F
板主意思應該是:有std::swap可以用,就別自己寫swap了
05/18 15:21, 3F

05/18 17:20, , 4F
=3= 我很久沒用c++了嗎
05/18 17:20, 4F

05/18 17:23, , 5F
其實我很久沒用了 XD
05/18 17:23, 5F

05/18 18:21, , 6F
algorithm random_shuffle ....
05/18 18:21, 6F

05/18 18:57, , 7F
亂數的我會用另一個bool陣列,儲存是否有選取過了
05/18 18:57, 7F

05/18 19:00, , 8F
在不大的情況下 我也會用位元運算XD
05/18 19:00, 8F

05/18 22:23, , 9F
= =竟然只要用random_shuffle就好,不知道為什麼有股怒氣
05/18 22:23, 9F

05/18 22:30, , 10F
XD
05/18 22:30, 10F
文章代碼(AID): #1DqsrxXO (C_and_CPP)
討論串 (同標題文章)
文章代碼(AID): #1DqsrxXO (C_and_CPP)