广告广告
  加入我的最爱 设为首页 风格修改
首页 首尾
 手机版   订阅   地图  繁体 
您是第 7179 个阅读者
 
发表文章 发表投票 回覆文章
  可列印版   加为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.054939 second(s),query:16 Gzip disabled
本站由 瀛睿律师事务所 担任常年法律顾问 | 免责声明 | 本网站已依台湾网站内容分级规定处理 | 连络我们 | 访客留言