查看完整版本: 亂數產生12個不重複的數
頁: [1] 2

cclamon 發表於 2008-10-16 06:22 PM

亂數產生12個不重複的數

#include<stdio.h>
#include<stdlib.h>

main()
{
        int a ;           //宣告12個陣列
        int i, k, t ;           //宣告3個整數
        for( int i=0 ; i<12 ; i++ )    //i=0 小於12
                a〔i〕= i + 1 ;
        for( int i=0 ; i<12 ; i++ ){
                k = rand() % 12 ;
                t = a〔k〕 ;
                a〔k〕 = a〔i〕 ;
                a〔i〕 = t ;
        }
        for( int i=0 ; i<12 ; i++ )
                printf("%d\t", a〔i〕);
        printf("\n");
        system("pause");
}


1~12之間不能重複    請幫我  解說一下個段程式碼的用意

[ 本帖最後由 cclamon 於 2008-10-16 18:27 編輯 ]...<div class='locked'><em>瀏覽完整內容,請先 <a href='member.php?mod=register'>註冊</a> 或 <a href='javascript:;' onclick="lsSubmit()">登入會員</a></em></div><div></div>

kasome 發表於 2008-10-16 11:22 PM

回復 1# 的帖子

先產生12個數: 1, 2, 3, 4, ...12
隨機挑二個數並交換

morgankim 發表於 2008-10-29 01:43 AM

厲害謝謝啦~
我複製回去參考

kalans_amikuves 發表於 2008-11-17 06:24 PM

要產生 不重覆的數 不是要用 srand 嗎  = =<br><br><br><br><br><div></div>

cclamon 發表於 2008-11-19 10:53 AM


是把 原有的12個陣列   a=1...a=12
用rand 亂數  從陣列裡面↑  挑一個值出來
重新放到陣列裡面 就出現 1~12不重複的整數

wwwss 發表於 2008-11-30 03:38 PM

這個程式碼的意思應該是取二個a陣列的值互換一個是亂數選的一個是照順序1到12就是每個都會跟別人交換就是了

sherlock8 發表於 2009-1-15 08:53 PM

我是這樣寫的
int a;
srand(time(NULL));
for( int i=0; i<12;i++) {
     a=rand()%12;  
     for(int j=0;j<i;j++){   //判斷陣列0~i-1有沒有跟i一樣的
            if(a==a)
            i--;
     }
}
for(int k=0;k<12;k++){
    cout<<a<<endl;
}
        return 0;

skinny 發表於 2009-1-18 10:54 PM

感謝大大的分享 小弟看了文章受用無窮 !!! 非常感謝啦

hayami411033 發表於 2009-1-21 01:28 PM

喂喂喂
srand吧
rand雖然第一次亂數
但第二次結果會和第一次一樣

b8712839 發表於 2009-2-3 12:57 PM

謝謝指教

感謝分享=ˇ=


推一下!! 

不錯~!

0800959595 發表於 2009-2-3 05:50 PM

第一個loop:
給予該陣列值1.2.3.4.5.6.7.8.9.10.11.12.。


第二個loop:
將有順序的12個值打亂,
i為index,從0到11,k也是index,但是它是亂數生成的(0~11亂數取一個)。
當i=0,k亂數得到2,則0的value與2的value交換,a[]會變成這樣:

其他依此類推,即可將a[]打亂。

第三個loop:
只是將a[]印出。

benq0311 發表於 2009-2-4 07:35 PM

對阿  為什麼不用srand呢??

jeta5566as 發表於 2009-2-21 10:45 AM

或許這帖有點久了,不過還是寫一個比較笨的方法:
#include <stdio.h>
#include <stdlib.h>
#include <time.h>
#define SIZE 12
int main(void)
{
    int s;
    int i,check;
    srand(time(NULL));
    for(i=0;i<SIZE;i++)
    {
     s=rand()%12+1;
     for(check=i;check>0;check--)
      if(s==s)
        i--;
    }
    for(i=0;i<SIZE;i++)printf("第「%2d」個:「%2d」\n",i+1,s);
    system("pause");
    return 0;
}
   
保證可以執行、沒有重複的數,只是方法有點笨.......<div class='locked'><em>瀏覽完整內容,請先 <a href='member.php?mod=register'>註冊</a> 或 <a href='javascript:;' onclick="lsSubmit()">登入會員</a></em></div><br><br><br><br><br><div></div>

left1882 發表於 2009-2-24 12:31 AM

終於了解囉....這裡還真的是個學習一些學校沒交的好東西

forgetk 發表於 2009-3-2 09:19 AM

又學到了一個東西
srand
常常來這邊逛
都可以發現到一些以前沒學到的東西
謝謝囉<br><br><br><br><br><div></div>
頁: [1] 2