作者angleevil (human)
看板C_and_CPP
標題Re: [問題] 利用陣列產生樂透號碼並對獎
時間Fri May 6 14:15:56 2011
※ 引述《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
→ angleevil:看了一下,感覺是用隨機洗牌的方法去達到亂數的目的 05/09 09:18
→ angleevil:其實我這個做法,並不能真正消除重複,即使我發現重複的 05/09 09:19
→ angleevil:值,給予新的值,其實還是有重複的可能. 05/09 09:19
→ firejox:恩 我也省略了排序 不過沒有比較快就是了... 05/09 18:42