廣告廣告
  加入我的最愛 設為首頁 風格修改
首頁 首尾
 手機版   訂閱   地圖  簡體 
您是第 7172 個閱讀者
 
發表文章 發表投票 回覆文章
  可列印版   加為IE收藏   收藏主題   上一主題 | 下一主題   
UBL 手機
個人頭像
個人文章 個人相簿 個人日記 個人地圖
特殊貢獻獎
初露鋒芒
級別: 初露鋒芒 該用戶目前不上站
推文 x0 鮮花 x33
分享: 轉寄此文章 Facebook Plurk Twitter 複製連結到剪貼簿 轉換為繁體 轉換為簡體 載入圖片
推文 x0
[C/C++][精華] 時間亂數疑問..
srand(time(NULL));
srand((unsigned)time(NULL));
這兩句有什麼不同??
請問time(NULL)是什麼意思...

還有下面這個樂透程式...
出來的數字好像不夠"亂"...
有沒有辦法讓他再取亂一點...
麻煩各位大大囉...^^


#include <stdio.h>
#include <stdlib.h>
#include <time.h>
#define ALLBALL 49
#define CHOOSE 7
int check(int lotto[]);
void bubble(int lotto[]);
main()
{
int i, j = 0, n, x, y;
int lotto;

printf ("要幾組明牌: & ..

訪客只能看到部份內容,免費 加入會員 或由臉書 Google 可以看到全部內容



[ 此文章被codeboy在2005-06-05 12:16重新編輯 ]



以花代替感謝文..我會更高興喔..^^

獻花 x0 回到頂端 [樓 主] From:台灣 | Posted:2005-06-03 19:59 |
夷希微
個人頭像
個人文章 個人相簿 個人日記 個人地圖
社區建設獎
知名人士
級別: 知名人士 該用戶目前不上站
推文 x13 鮮花 x1682
分享: 轉寄此文章 Facebook Plurk Twitter 複製連結到剪貼簿 轉換為繁體 轉換為簡體 載入圖片

time(NULL); 函式是取目前系統時間,回傳值是 long 型態的長整數~
long 型態的變數值範圍是 -2147483647 ~ +2147483647~~
加了 (unsigned) 就表示不要負數,範圍值會變為 0 ~ 4294967295
srand(long); 函式是設定亂數種子用的,也就是指定亂數要從亂數表的哪個位置開始取~
讓他跟著時間變動才可以每次取都不一樣的,不然他就會固定從第一個位置取 ^_^
還有~設定亂數種子這個動作只要做一次就可以了~不要加在迴圈裡一直做~
小妹幫您的程式碼改了兩個地方,一個是亂數種子的位置,另一個是函式的回傳值 ^_^
基本上,亂數種子改了地方,取出來的值應該就很亂了唷 ^_^
照理說您原先的程式是不能跑的,因為您一直在迴圈裡重設亂數種子位置~讓它連續取出的七個值都是一樣的~
結果會導致在您的 check 函式中~永遠傳回 0 ~而步入無窮迴圈呢 ^^" 表情 表情

複製程式
#include <stdio.h>
#include <stdlib.h>
#include <time.h>
#define ALLBALL 49
#define CHOOSE 7
int check(int lotto[]);
void bubble(int lotto[]);
void main()
{
    int i, j = 0, n, x, y;
    int lotto[ALLBALL];

    printf ("要幾組明牌: ");
    scanf ("%d",&n);

    srand((unsigned)time(NULL)); // 取亂數種子語法移至此

    printf ("~~樂透明牌程式(%d取%d)~~By UBL\n", ALLBALL, CHOOSE);
    while (j < n)
    {
        for (i = 0; i < CHOOSE; i++)
        {
            lotto[ i ] = 1 + rand() % ALLBALL;
        }
        if (!(check(lotto)))
            j--;
        else
        {
            bubble(lotto);
            for (i = 0; i < CHOOSE; i++)
                printf ("%02d  ", lotto[ i ]);
            printf ("\n");
        }
        j++;
    }
    system ("pause");
}

int check(int lotto[])
{
    int i, j;
    for (i = 0; i < CHOOSE; i++)
        for (j = i + 1; j < CHOOSE; j++)
            if (lotto[ i ] == lotto [j])
                return 0;
    return 1; //補上這一行讓此函式較完整
}

void bubble(int lotto[])
{
    int i, j, temp, flag = 0;
    for(i = 1; (i < CHOOSE) && (!flag); i++)
    {
        flag = 1;
        for(j = 0; j < (CHOOSE-1); j++)
            if (lotto[j] > lotto[j+1])
            {
                temp = lotto[j];
                lotto[j] = lotto[j+1];
                lotto[j+1] = temp;
                flag = 0;
            }
    }
}

此文章被評分,最近評分記錄
財富:50 (by codeboy) | 理由: 感謝回答喔~^^


視之不見,名曰夷;
聽之不聞,名曰希;
搏之不得,名曰微。
此三者不可致詰,故混而為一。

[截自老子道德經第十四章]
獻花 x1 回到頂端 [1 樓] From:台灣中華電信 | Posted:2005-06-04 19:40 |
UBL 手機
個人頭像
個人文章 個人相簿 個人日記 個人地圖
特殊貢獻獎
初露鋒芒
級別: 初露鋒芒 該用戶目前不上站
推文 x0 鮮花 x33
分享: 轉寄此文章 Facebook Plurk Twitter 複製連結到剪貼簿 轉換為繁體 轉換為簡體 載入圖片

ㄜ...放在迴圈裡是想說讓它更亂看看...
貼上來忘了修改... 表情

不過回去試了一下...
它幾乎都是從個位數開始出現... 表情


以花代替感謝文..我會更高興喔..^^

獻花 x0 回到頂端 [2 樓] From:台灣中華電信 | Posted:2005-06-04 21:50 |
夷希微
個人頭像
個人文章 個人相簿 個人日記 個人地圖
社區建設獎
知名人士
級別: 知名人士 該用戶目前不上站
推文 x13 鮮花 x1682
分享: 轉寄此文章 Facebook Plurk Twitter 複製連結到剪貼簿 轉換為繁體 轉換為簡體 載入圖片

因為您有做了 bubble(lotto); 泡沫排序呀~不是嗎 ^^"
所以最後輸出當然會是小的數在前面啊 ^^"
您可以試著將 bubble(lotto); 註解掉再試試 ^_^
它就會不按大小順序亂排了 表情
我想這樣應該就是您所要的『亂』了吧 ^_^ 表情


視之不見,名曰夷;
聽之不聞,名曰希;
搏之不得,名曰微。
此三者不可致詰,故混而為一。

[截自老子道德經第十四章]
獻花 x0 回到頂端 [3 樓] From:台灣中華電信 | Posted:2005-06-04 22:01 |

首頁  發表文章 發表投票 回覆文章
Powered by PHPWind v1.3.6
Copyright © 2003-04 PHPWind
Processed in 0.102794 second(s),query:16 Gzip disabled
本站由 瀛睿律師事務所 擔任常年法律顧問 | 免責聲明 | 本網站已依台灣網站內容分級規定處理 | 連絡我們 | 訪客留言