看板 C_and_CPP 關於我們 聯絡資訊
※ 引述《fv731183 (0.0)》之銘言: : 標題: Re: [問題] 利用陣列產生樂透號碼並對獎 : 時間: Fri May 6 01:59:43 2011 : : ※ 引述《fv731183 (0.0)》之銘言: : : 開發平台(Platform): Dev c++ : : 問題(Question): : : 1.呼叫亂數函數做出投注者陣列 A[32767][6] : : 共32767筆投注 每筆有6個數字(1~42) : : 每個數字不重複 數字由小到大排序 : : 2.呼叫亂數函數做出中獎號碼陣列P[6] : : 從1至42中亂數產生6個不同數字 : : 3.印出投注者中獎情形 : : 投注一筆50元 投注金額一半當彩金 : : 頭獎(6碼全中)--全部彩金的三分之一 : : 二獎(中5碼) --全部彩金的四分之一 : : 三獎(中4碼) --全部彩金的五分之一 : : 四獎(中3碼) --全部彩金的六分之一 : : 若有多人中同一獎 則該比彩金均分: - : : : : 目前進度九成五 : : 可是好像會有重複 可以請大家指點一下嗎 : : 幫重覆時頭獎變好多個 XD~ : : 以下是目前打出來的程式:http://codepad.org/D0js720Z : : (後面印出字開始 某同學幫我壓縮的好擠 請見諒) : : -- : ※ 發信站: 批踢踢實業坊(ptt.cc) : ◆ From: 114.41.67.15 : ※ 編輯: fv731183 來自: 114.41.67.15 (05/06 02:04) : ※ 編輯: fv731183 來自: 114.41.67.15 (05/06 02:13) : → CCWck:邏輯運算子 是&& 05/06 02:17 : → angleevil:可以用srand來減少重複的機會,還有用for檢查每次進來的 05/06 10:59 : → angleevil:值,如果不相同則不塞值,最後檢查有沒有全塞滿. 05/06 11:00 : → fv731183:改成&& 還是會重複 05/06 13:52 : → fv731183:用srand 應該加在哪裡好呢? 05/06 13:52 這是我兩者合一的例子: 你參考看看吧 const int nSize = 42; void CheckVal(int nVal , int *pnArr ,int nIndex) { int nDone = 1; int i = 0; for ( i = 0 ; pnArr[i] != -1 ; ++i) { if (nVal == pnArr[i]) { nDone = 0; break; } } if (nDone == 1) { pnArr[nIndex] = nVal; } else { srand(time(NULL) + nIndex); pnArr[nIndex] = rand() % 42; } } int main() { int nArr[nSize]; int i = 0; memset(nArr,-1,sizeof(nArr)); for ( i = 0 ; i < nSize ; ++i) { CheckVal(rand() % nSize ,nArr,i); } for ( i = 0 ; i < nSize ; ++i) { printf("%d ",nArr[i]); } printf("\n"); return 0; } -- ※ 發信站: 批踢踢實業坊(ptt.cc) ◆ From: 61.220.204.217
firejox:看到別人PO就有想寫一個的衝動XD 05/06 18:42
firejox:http://codepad.org/vr9gt5VL 05/06 18:42
firejox:忘了處理long long XD http://codepad.org/Eg7lckwh 05/07 00:47
angleevil:看了一下,感覺是用隨機洗牌的方法去達到亂數的目的 05/09 09:18
angleevil:其實我這個做法,並不能真正消除重複,即使我發現重複的 05/09 09:19
angleevil:值,給予新的值,其實還是有重複的可能. 05/09 09:19
firejox:恩 我也省略了排序 不過沒有比較快就是了... 05/09 18:42