Pascal 問題 六合彩 ticket

2007-04-30 2:11 am
要用pascal寫一個program
係要整d六合彩組合出黎 (1-49)
eg. 5 9 18 25 33 41,
2 4 9 16 31 36 ......
我的寫法:
array:number[1..6]of integer
跟住for i:=1 to 6 do
number[i]:=random(50)
之後用boolean去check重覆同no.係零的
有就false 再random過 冇就ture 打ticket
之後成功寫完
可惜我呀sir話唔可以用boolean寫
我就唔識寫了.....
有冇人可以教下我???
講原理同大約寫法就ok了
唔洗打出黎
plx help~~~

回答 (1)

2007-05-01 5:33 am
✔ 最佳答案
電腦六合彩有兩種寫法:
1. 標記法: 大約好似你上面的講法,
開一個1..49格的boolean陣列;
重複出隨機數, 直至佢未出現過(在boolean陣列中沒有記號)
總共做6次, 最後boolean陣列中有6個記號(true), 順序由1--49格檢查哪6格有記號
大約寫法:
var seen:array[1..49] of boolean;
......
begin
把seen的格填false;
for i:=1 to 6 do
begin
repeat
 m:=random(49)+1;
until not seen[m];
seen[m]:=true;
end;
.....
2. 方法2: 順序查找法
每出一個隨機數, 都檢查在之前出過的數之中有冇出過, 如果有就重出, 例如出到第5個, 第由第1個到第4個比較, 看看有冇重複。
var a:array[1..6] of integer;
...
begin
for i:=1 to 6 do
  repeat
  a[i]:=random(49)+1;
  f:=0;
  for j:=1 to i-1 do
  if a[j]=a[i] then
  begin
    f:=1;
   break;
   end;
  until f=0;
.....
end.
睇完上面段程式大概明白吧, 唔明可以再問, 而中間由1至i-1搵重複可以唔用f:=0; 改用true和false都得, 亦可以唔用for, 改用while都得。
注意:為了可以縮入,我每句前面用了全型空格,所以唔好直接複制入pascal到執行。


收錄日期: 2021-04-12 21:11:54
原文連結 [永久失效]:
https://hk.answers.yahoo.com/question/index?qid=20070429000051KK04069

檢視 Wayback Machine 備份