使用函式 電腦隨机選號

2013-09-19 6:58 am
大大們好 我又來了^^
如題 以下是小弟想出來的
可是 每組的號碼都一樣=.=
請問那裡出了問題??
使用時間亂數種子 號碼不是都會隨机嗎?
#include<stdio.h>
void lot_auto(void);
int main(void)
{
int n;
int time=1;
printf("輸入幾組大樂透電腦選號:");
scanf("%d",&n);
do{
lot_auto();
time++;
} while(time<=n);
return 0;
}
void lot_auto(void)
{
int lot[49];
int choose[7];
int min=1,max=49,ball,num=7,r=1;
int i,j,choice;
ball=max-min+1;
for (i=0;i<ball;i++)
{
lot[i]=min+i;
}
srand((unsigned)time(NULL));
for (i=0;i<num;i++)
{
choice=rand()%ball;
choose[i]=lot[choice];
for (j=choice;j<ball;j++)
{
lot[j]=lot[j+1];
}
ball--;
}
printf("第%d組電腦選號號碼:",r);
for (i=0;i<num-1;i++)
{
printf("%d ",choose[i]);
}
printf("\n");
printf("特別號為%d",choose[6]);
printf("\n");
}
麻煩大大幫忙指正

回答 (5)

2013-09-19 7:37 am
✔ 最佳答案
你在 lot_auto() 中以 time() 重設 rand seed.
但 lot_auto 被快速地呼叫, time() 都相同.
相當於每次用相同的 seed 重設 rand.
當然會得到相同的 random series

把 srand(time()) 改在 do { lot_auto(); .. } 之前.
這樣每次執行時, 都會因為你啟動時間不同, 而產生不同的 random series.
也可以確保你的 lot_auto 幾乎都可以有不同解

2013-09-19 12:42:08 補充:
PS. 還是強調, 是因為呼叫 time() 的間隔時間太短, time() 相同, srand( time() ) 相當於用相同的 seed 產生 random series.

只要時間夠長, 即使用你的程式, 第十萬筆肯定跟第一筆不同.
2014-08-05 11:23 am
到下面的網址看看吧

▶▶http://*****
2013-11-01 11:19 pm
瞭解一次、多一次的保障。尋找八大行業工作。必須謹慎小心一點。
小巴常說:保險跟冒險只差一個字,意義卻是大不同!
一通電話、一次詢問。都是為自己的著想。
2013-09-19 9:08 pm
2013-09-19 3:54 pm
這我之前測試過
srand((unsigned)time(NULL));
要放在主程式前面 才會是亂數


收錄日期: 2021-05-04 02:05:10
原文連結 [永久失效]:
https://hk.answers.yahoo.com/question/index?qid=20130918000015KK04330

檢視 Wayback Machine 備份