c51求随机数产生及剔除 的算法?

[复制链接]
 楼主| doob 发表于 2009-11-9 14:29 | 显示全部楼层 |阅读模式
void mySrand()
{

srand(TL2);
}

UINT8 myRandNum()
{
static UINT8 pre_rand;
UINT8 rand_num;
UINT16 tmp1;

tmp1=rand();
rand_num=tmp1%100;
  pre_rand=rand_num;
return rand_num;
}

但我想把已经产生的随机数,下次不再产生,不知
如何剔除呢?
譬如:第一次随机数3,以后就不能产生3。。。
这样做就是为了保证100次内,100个数字轮一遍;
谢谢!
mohanwei 发表于 2009-11-9 16:50 | 显示全部楼层
void StartNewGame()
{
        CArray<int,int> List;                                //
        int i;

        //给数组赋值
        for(i=0;i<100;i++)
        {
                List.Add(j);
        }

        srand((unsigned)time( NULL ));//随机数喂种子
        while(1)
        {       
                int size=List.GetSize();//剩余牌数
                if(size==0)
                        break;
                //取得一个随机数
                i=(rand()*rand())%size;
                //处理该数
                //……
                List.RemoveAt(i);//删除该数
        }
}
思路很简单,看代码……
(rand()*rand())%size表示在0-size之间取一个随机数。
第一次在100个数之间随机取一个,第二次在99个数之间随机取一个,第三次在98个数之间随机取一个……而取出来的数被删掉,所以之后都不会再出现。
程序匠人 发表于 2009-11-9 16:00 | 显示全部楼层
要么就做一个伪随机数表
要么就开一个数组**下每次产生的随机数,以后再产生的数都去和这个数组的每一个值比对,如果相同就重新运算,直到产生新数。
李冬发 发表于 2009-11-9 21:14 | 显示全部楼层
不会吧,匠人也犯LS的错呢?
程序匠人 发表于 2009-11-9 21:59 | 显示全部楼层
不会吧,匠人也犯LS的错呢?
李冬发 发表于 2009-11-9 21:14

啊?没看出来
不亦心 发表于 2009-11-9 22:13 | 显示全部楼层
学习ing
mohanwei 发表于 2009-11-10 08:26 | 显示全部楼层
没看清是C51……可能要换别的方法了
您需要登录后才可以回帖 登录 | 注册

本版积分规则

165

主题

1113

帖子

3

粉丝
快速回复 在线客服 返回列表 返回顶部