想了很久請大大看一下亂數產生不重複 |
答題得分者是:GGL
|
jenwe
一般會員 發表:34 回覆:38 積分:24 註冊:2007-03-23 發送簡訊給我 |
第一種寫法可跑無誤
以下 Memo1->Clear(); randomize(); int a,b,i,j; int array[20]; bool c; a=20; b=0; for(i=0;i { do { c=false; array[i]=random(20); for(j=0;j { if(array[i]==array[j]) c=true; } } while(c==true); b ; } for(i=0;i {Memo1->Lines->Add("temp[" IntToStr(i) "]=" IntToStr(array[i]));} } 但也想到第二種相同想法~主要迴圈寫法不同,但是卻跑出重複了~各位大大可以幫我看看嗎? 如以下 for (i=0;i { array[i]=random(20); for (j=0;j { array[j]=random(20); if (array[i]==array[j]) { b ; } array[i]=array[j]; } } 編輯記錄
jenwe 重新編輯於 2007-07-30 19:16:42, 註解 無‧
|
Stallion
版主 發表:52 回覆:1600 積分:1995 註冊:2004-09-15 發送簡訊給我 |
1.你沒發現你的程式碼沒貼完整嗎?有部分程式碼不見了!張貼程式碼時,請在編輯內容上方使用「程式碼區塊」機制張貼!
2.實在不太懂你上述的程式碼,以下寫了個範例請參考~
<textarea cols="60" rows="10" class="cpp" name="code">
int array[20]={0};
int i,j,val;
bool found; randomize();
for ( i = 0 ; i < sizeof(array)/sizeof(array[0]) ; i )
{
found = false;
val = random(20) 1;
for ( j = 0 ; j < i ; j )
{
if ( val == array[j] )
{
found = true;
break;
}
}
if ( found )
--i;
else
array[i] = val;
}
</textarea>
|
GGL
資深會員 發表:104 回覆:600 積分:335 註冊:2006-11-05 發送簡訊給我 |
你可以試試看用標準函式庫...
我在網路上找到下面的做法....或者你可以搜尋類似發牌的方法...先給定1~n,然後打亂順序取前幾個,這樣也不會重複 <textarea class="cpp" rows="10" cols="60" name="code"> #include |
本站聲明 |
1. 本論壇為無營利行為之開放平台,所有文章都是由網友自行張貼,如牽涉到法律糾紛一切與本站無關。 2. 假如網友發表之內容涉及侵權,而損及您的利益,請立即通知版主刪除。 3. 請勿批評中華民國元首及政府或批評各政黨,是藍是綠本站無權干涉,但這裡不是政治性論壇! |