荔园在线

荔园之美,在春之萌芽,在夏之绽放,在秋之收获,在冬之沉淀

[回到开始] [上一篇][下一篇]


发信人: Ohoh (深大毕业生), 信区: Program
标  题: Re: 一个随机数的问题
发信站: 荔园晨风BBS站 (Sun May 25 20:08:46 2003), 站内信件

哈哈,就知道你要说发牌!

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

#define MAX 54  /* 定义牌数 */

void push(int); /* 进栈 */
int pop();      /* 出栈 */
int find(int);  /* 找相同随机数 */

int stack[54];  /* 定义一个栈 */
int top;        /* 顶设定 */

void main( void )
{
        int i;
        int no;
        srand((unsigned)time(NULL)); /* 设定随机数种子 */

        for (i=0; i<MAX; i++){
                no=(rand()%54);          /* 产生小于54的随机数,相当于洗牌 */
                /* 如果不等于0,和不同前面的随机数,则入栈 */
                if (no!=0 && !find(no)) push(no);
        }

   printf("\tPLAYER1\tPLAYER2\tPLAYER3\tPLAYER4\n");

   for(i=0; i<5; i++){
           printf("\t%6d", pop()); /* 发牌 */
           printf("\t%6d", pop());
           printf("\t%6d", pop());
           printf("\t%6d", pop());
           printf("\n");
   }

}

void push(int i) /* 进栈 */
{
        stack[top++] = i;
}

int pop()  /* 出栈,发牌 */
{
        return stack[--top];
}

int find(int x)
{
        int i;
        for (i=0; i<top; i++)
                if (stack[i] == x) return 1; /* 找到则返回1 */
        return 0;
}


结果:


        PLAYER1 PLAYER2 PLAYER3 PLAYER4
            31       8      39      37
            35      46       3      14
            34      43       9      24
            52       1      51      45
            53      25      36      49
Press any key to continue

上面的结果为随机的结果,每次运行都不同的。嘿嘿

1-54 代表每一张牌。



程序写得很烂的,大概就这样吧,我的想法。不过我本来想模拟洗牌动作的,可惜,
不会!呵呵



【 在 xiaoxin (小新) 的大作中提到: 】
: 你的意思是?...
: 应该怎么用法呢。有一个数组是肯定的,但是我不知道怎样可以达到我说的
: 那样。
: 我想这个问题有点象洗扑克牌,有52张他随机发给每一家。
: 发52次就发完了,52张牌就象一个数组,但是怎么发出去呢?
: 【 在 Version (音乐,美的最初与最终) 的大作中提到: 】
: :  哦。那你用数组然后随机咯。


--


        女生喜欢让她笑的男生,但她真正爱的,却是让她哭的男人!

※ 来源:·荔园晨风BBS站 bbs.szu.edu.cn·[FROM: 192.168.32.45]


[回到开始] [上一篇][下一篇]

荔园在线首页 友情链接:深圳大学 深大招生 荔园晨风BBS S-Term软件 网络书店