Re: [問題] 請問為什麼產生亂數,卻都一樣??

看板C_and_CPP作者 (非天夜翔)時間14年前 (2010/02/12 17:22), 編輯推噓6(607)
留言13則, 11人參與, 最新討論串3/3 (看更多)
※ 引述《iversonjimmy (Effort)》之銘言: : 不好意思,之前我有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; number 未必 initialized請注意: for (i=0;i<number;i++) : { : number1[0]=(rand()%count+1); 你把這行 number1[0] 放在這, 會讓每次 loop 都會被改變 number1[0] 的值, 我建議你把這行拿到 for-loop 外, 從 i = 1 開始 而下面 if( i > 0 ) 可以省略。 如此就可以避免妳說的問題。 : 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; : } 最後建議你再可以爬爬文, 以前有蠻多高手提到怎麼取出不重複的亂數, 常見的是洗牌法,當然你同學說的也是一種, 不過在你取的數量超過母體數量的一半之後, 會花較多執行時間來檢查重複與重新取亂數, 舉例來說,你有20個相異的人名要取出15個, 當你要取第15個時,你重複的機率為14/20, 而你卻必須要從頭檢查到第14個是否有相同, 若相同又必須要重新取亂數一次,再做檢查, 這實在令人感到這會花費非常多的時間在這, 然而這一切都會是跟你自己的需求有所關係, 因為如果你只要取出少量而不重複的亂數值, 那麼洗牌法就會浪費過多記憶體空間來完成, 故還是需要由你自己來決定哪種方法較適合。 其實講了那麼多只是要騙騙P幣,我是嫩咖。 謝謝各位大大還是那麼認真的看完。m(_@_)m 這裡是騙P幣的最後一行。謝謝收看。 -- 希望消失到自由的風中, 渴望解除掉束縛的羈絆。 期望悄悄的消失在風中, 感受那沒有羈絆的自由。 -- ※ 發信站: 批踢踢實業坊(ptt.cc) ◆ From: 211.74.9.2

02/12 17:23, , 1F
我是用半透明背景....
02/12 17:23, 1F

02/12 17:25, , 2F
哪尼~~我輸了~~faint
02/12 17:25, 2F

02/12 18:08, , 3F
我也看到了...今天才開透明背景就有好處@@"
02/12 18:08, 3F

02/12 18:21, , 4F
這是防拷貝嗎?
02/12 18:21, 4F

02/12 19:03, , 5F
賺P幣
02/12 19:03, 5F

02/12 19:15, , 6F
原來可以這樣賺P幣
02/12 19:15, 6F

02/12 19:30, , 7F
又學到一招…
02/12 19:30, 7F

02/12 19:40, , 8F
這樣可以控告洗錢的喔 輸入無意義內文 ID_Finance板
02/12 19:40, 8F

02/12 20:17, , 9F
這一篇文章值 670 元
02/12 20:17, 9F

02/12 21:31, , 10F
樓樓上幫我找到了 我剛就在找這條 = =
02/12 21:31, 10F

02/12 21:32, , 11F
此風不可長,這次警告一次,下次就秉公處理了
02/12 21:32, 11F

02/12 21:33, , 12F
報告,是。下次不敢用了,因為以前不知道這一條。
02/12 21:33, 12F

02/12 23:51, , 13F
真是無聊。
02/12 23:51, 13F
※ 編輯: csihcs 來自: 211.74.9.2 (02/13 01:14)
文章代碼(AID): #1BTHtJFg (C_and_CPP)
討論串 (同標題文章)
文章代碼(AID): #1BTHtJFg (C_and_CPP)