一個類似樂透棘手的問題 |
尚未結案
|
p84586
一般會員 發表:1 回覆:0 積分:0 註冊:2003-12-09 發送簡訊給我 |
|
azurecloud
中階會員 發表:52 回覆:108 積分:92 註冊:2003-09-04 發送簡訊給我 |
Hi, p84586 您好:
我用 Delphi 寫開「一次」獎的程序如下: procedure TForm1.Button1Click(Sender: TObject);
var Num : array[0..41] of integer;
i,j,k,l : integer;
begin
// 初始化指標陣列
for i := 0 to 41 do Num[i] := 0; // 初始化亂數
Randomize;
for j := 1 to 6 do // 搖獎六次囉!
begin
k := 0; // 確保同一次開獎中,號碼不重複
repeat
k := Random(41)+1; // 這裡會得到 1 to 42 的整數
until (Num[k]<>1);
Num[k] := 1; Case j of
1: Panel1.Caption := inttostr(k);
2: Panel2.Caption := inttostr(k);
3: Panel3.Caption := inttostr(k);
4: Panel4.Caption := inttostr(k);
5: Panel5.Caption := inttostr(k);
6: Panel6.Caption := inttostr(k);
end;
end; end;
執行畫面如下,您可以參考我的做法自行修改成 C 的版本,希望幫的上忙
========================
我要努力向上~~[/h5]======================== |
azurecloud
中階會員 發表:52 回覆:108 積分:92 註冊:2003-09-04 發送簡訊給我 |
對了,請在站上搜尋「樂透」兩字,站上還有一堆可參考,請別忘
了下次發言前先搜尋一下喔!(我也忘了先搜尋,做了白工… >_<)
還有,若要 150 組都不相同…,有必要嗎?基本上一組若有 15 個
號碼,要全部相同的機率是非常非常低的…
真的要的話,或許可另外建一個 150 * 15 的陣列,將先前選出的號
碼存入,後面搖出來的號碼先一個一個比對過後,沒有重複才存入。 ========================
我要努力向上~~[/h5]======================== |
Royce520
高階會員 發表:18 回覆:157 積分:100 註冊:2002-09-13 發送簡訊給我 |
p84586 and azurecloud 你好,
只開一次獎的寫法, 在c++裏 使用 stl的話,
可以很簡單喔... unsigned number[42];
for (int n=0; n<42; n)
number[n] = 1 n; random_shuffle(number 0, number 42);
取出 number[0] ... number[6]
這六個數值 就是開「一次」獎的程序了 至於, 要開150組不一樣的, 發揮一下創意吧 *真實的事物最美, 簡單的道理最好, 我能體會的 太少*
------
不要忘記呼吸,不要忘記編程! ∩__∩ |
azurecloud
中階會員 發表:52 回覆:108 積分:92 註冊:2003-09-04 發送簡訊給我 |
感謝 Royce520 大大,小弟受教了,C++ 的函式還真是簡潔啊!
小弟看不太懂 random_shuffle(number+0, number+42); 這一句
猜想是將 number 陣列做亂數排列,只不知是真的對其內容值做
移動,或是做了索引?還有,一開始已用迴圈給定了 number 陣
列值為 1~42 了,那這兒 number+0, number+42 是何解呢?
所以可否請您指導 random_shuffle() 函數的輸入輸出為何?感謝。 ========================
我要努力向上~~[/h5]======================== |
本站聲明 |
1. 本論壇為無營利行為之開放平台,所有文章都是由網友自行張貼,如牽涉到法律糾紛一切與本站無關。 2. 假如網友發表之內容涉及侵權,而損及您的利益,請立即通知版主刪除。 3. 請勿批評中華民國元首及政府或批評各政黨,是藍是綠本站無權干涉,但這裡不是政治性論壇! |