作者iversonjimmy (Effort)
看板C_and_CPP
標題Re: [問題] 請問為什麼產生亂數,卻都一樣??
時間Fri Feb 12 14:29:12 2010
不好意思,之前我有po一篇類似亂數但保證不重複的程式碼,
後來有和朋友討論後,想到的解決辦法的概念是,
將亂數存到陣列中,當產生一筆亂數值後,會和之前的前幾筆做比較,
如果發生重複,該筆亂數值會重新計算,並再做比較,
不過程式在執行後,還是會發生重複的情形(雖然機率不高XDD),不知道哪裡出了錯...
程式碼可能有點長,希望各位能見諒,幫我找蟲...先跟妳們說聲謝謝。
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <time.h>
int main(void)
{
char name[40][80];
int count=0;
int number1[10];
int length,number,i,j,number2;
int onetimestate;
srand(time(NULL)); //一定要加入此程式碼
printf ("請輸入字串,最多40筆,按 enter 即離開。\n");
while (count<40)
{
printf ("請輸入第%d個字串: ",count+1);
gets(name[count]);
length=strlen(name[count]);
if(length==0)
break;
count++;
}
printf ("您總共輸入了%d個字串\n",count);
if (count%2==0)
number=count/2;
for (i=0;i<number;i++)
{
number1[0]=(rand()%count+1);
if (i>0)
{
onetimestate=0;
do
{
number2=(rand()%count+1);
onetimestate=0;
for (int j=0;j<i;j++)
{
if (number1[j]==number2)
onetimestate=1;
}
}while (onetimestate==1);
number1[i]=number2;
}
}
for (i=0;i<number;i++)
{
printf ("%d\n",number1[i]);
}
system ("pause");
return 0;
}
--
※ 發信站: 批踢踢實業坊(ptt.cc)
◆ From: 140.130.204.22
推 dendrobium:其實...亂數不代表不會重複吧... 02/12 14:38
→ tinlans:亂數要符合統計學上的 uniform distribution,可以重複。 02/12 17:36