English Deutsch Français Italiano Español Português 繁體中文 Bahasa Indonesia Tiếng Việt ภาษาไทย
所有分類

#include
#include
#include
#include
#include
void main(void)
{
int a1,a2,a3,a4,a5,a6;
int a,b,c=0;
FILE *inptr;

inptr=fopen (\"C3_5.IN\",\"r\");
fscanf(inptr,\"%d %d %d %d %d %d\",&a1,&a2,&a3,&a4,&a5,&a6);
fclose(inptr);
srand (time(NULL));/*電腦隨機選號*/
printf(\"你的號碼是\\n\");
printf(\"%d %d %d %d %d %d\\n\",a1,a2,a3,a4,a5,a6);
printf(\"大樂透中獎號碼\\n\");
for(a=1;a<7;a++)
{
b=rand()%49+1;
if((b==a1)||(b==a2)||(b==a3)||(b==a4)||(b==a5)||(b==a6))
c++;
printf(\"%d\\t\",b);

}
printf(\"\\n\");
if(c==6) printf(\"頭獎\\n\");
else if(c==5&&b==a6) printf(\"貳獎\\n\");
else if(c==5) printf(\"參獎\\n\");
else if(c==5&&b==a6) printf(\"肆獎\\n\");
else if(c==4) printf(\"伍獎\\n\");
else if(c==3&&b==a6) printf(\"陸獎\\n\");
else if(c==3) printf(\"普獎\\n\");
else if(c==2) printf(\"貢龜獎\\n\");
else if(c==1) printf(\"貢鱉獎\\n\");
else if(c==0) printf(\"公益獎\\n\");
}
我寫完之後發現一些問題,就是run出來的時候會出現重複的號碼~~~不知怎麼修改請幫幫我~~已經用過各種方法但還是修改不掉重複的號碼~~可以的會也順便幫我加上註解我才能夠加以理解

2006-03-26 16:29:45 · 3 個解答 · 發問者 賢彥 4 in 電腦與網際網路 程式設計

3 個解答

當以亂數產生一組不重覆的數字時,最簡單的方法便是以一個陣列來判斷產生
的亂數是否已出現過。

以您的題目為例,可宣告陣列int Lottory[50]={0};(註={0} 代表該陣列預設
值為0)

假如第一次取得亂數為a,則令Lottory[a]=1;
假如第二次取得亂數為b,則令Lottory[b]=1;
因此,當第三次取得亂數c時,只要先檢查Lottory[c]是否已設成1,便可以判
斷該亂數是否已被選取過。

接著的重點便是,如何一直跑亂數,直到取得不曾出現過的亂數?這時便要使
用while 這個指令了,一樣還是以您的題目為例:

將b=rand()%49+1;程式修改如下

while(true) //無限循環迴圈
{
b=rand()%49+1; //取亂數
if(Lottory[b]==0) //判斷亂數是否未曾出現過
{
Lottory[b]=1; //設定亂數已出現
break; //跳出無限迴圈
}
}

2006-03-27 15:31:35 · answer #1 · answered by 明宏 2 · 0 0

這種方法效率普普.........................(我純粹是來亂的,想說樓上兩個剛好兩極化,那我就當個中庸者,哈哈哈哈,酸ˇˇ"~~~~~)

2008-01-14 11:32:10 · answer #2 · answered by ♂上流攴台客ζ☆ 1 · 0 0

這種方法效率明明就很好

2006-11-18 05:58:05 · answer #3 · answered by Huang, Song-Ming 2 · 0 0

fedest.com, questions and answers