f128128 10 發表於 June 14, 2008 檢舉 Share 發表於 June 14, 2008 到底樂透開獎是如何避免重複呀?電腦的加分題-矩陣亂數我用的是很詭異的方法...1.cin >>a;先輸入邊長假如是3好了2.for(i=1;i=a;i++){for(j=1;j=a;j++){test[j]=a*(i-1)+j;}}將矩陣填入數字in order以3來說1 2 34 5 67 8 93.for(s=1;s=a;s++){for(t=1;t=a;t++){int x=rand();int y=rand();int r1=x%a+1;int r2=y%a+1;test[t]=test[r1][r2];}}隨機的兩個兩個交換,做a*a次交換:P有更正統的寫法吧?我的是列出來在隨機對換樂透可能也是這樣...但好麻煩 鏈接文章 分享到其他網站
zxzxcool 10 發表於 June 15, 2008 檢舉 Share 發表於 June 15, 2008 #include <cstdlib>#include <iostream>using namespace std;int main(int argc, char *argv[]){ srand(time(NULL)); //設定亂數擷取來源 int inp, mtx[100]; //陣列定為100(我個人是用一維陣列) cin >> inp; //輸入邊長 int dup=inp*inp; //邊長平方為dup, 這將作為陣列的元素各數 for(int i=1; i<=dup; i++){ if(i%inp==1){ cout << "\n";} //如果陣列第i個元素除以邊長的餘數為1,則換行 //意思是說假設邊長為3,則在第四個元素輸出前換行 mtx=rand()%dup+1; //mtx陣列第i元素取亂數 BACK: for(int j=1;j<i;j++){ //這個for是針對1~i 的範圍內檢查陣列第i項有無和前面的重複 if(mtx[j]==mtx){ mtx=rand()%dup+1; //重複的話則再取一次亂數 goto BACK; //再回到之前的BACK,重新從第1項開始檢查 } } cout << mtx << " "; //如果都ok則輸出第i項} system("PAUSE"); return EXIT_SUCCESS;}//goto能不用就不要用(但真的好用)//以上是個人做法僅供參考//只允許輸入10以內的範圍(陣列長度)//這不是個好做法,看來我要多修演算法了 > < 鏈接文章 分享到其他網站
Recommended Posts