当前位置: 代码迷 >> C语言 >> [求助]求随机正整数问题
  详细解决方案

[求助]求随机正整数问题

热度:229   发布时间:2006-08-06 15:50:02.0
[求助]求随机正整数问题

我想编一个猜数字的游戏,须要让计算机随机生成一个4位数的正整数,条件有两个:
1、所生成的4位数每一位上的数字要不同;
2、要保证50次内生成的整数重复次数不得超过2次;
请问我该怎么办?

搜索更多相关的解决方案: 整数  随机  

----------------解决方案--------------------------------------------------------
我也想知道
----------------解决方案--------------------------------------------------------
以下是引用sunyuantz在2006-8-6 15:50:02的发言:

我想编一个猜数字的游戏,须要让计算机随机生成一个4位数的正整数,条件有两个:
1、所生成的4位数每一位上的数字要不同;
2、要保证50次内生成的整数重复次数不得超过2次;
请问我该怎么办?

用链表来解会简单些.
算法如下:
1,建立一个链表寸0-9十个数.每次rand()%(10-i),(第一次必须特殊化,因为首个数字不能为0)从链表中对应取相应的数字,每取出数字后,释放相应的节点。按照这个办法可取到4位每一位上的数字都不同的正整数.
2,建立一个链表,链表的长度最大为50,节点信息为每次生成的正整数数值和它所重复的次数(以下称重复次数)以及它是在第几次生成(简称生成次数)的,假设第j次生成的正整数是num来讲,只要遍历这个链表,每个节点的生成次数成员次数增1.如果num在链表中已经有建立num值的节点,则相应的节点重复次数成员增1(如果重复次数超过2,重新生成数字,节点的重复次数成员还原,即减1),如果num在链表中没有相应的节点,则分两种情况:<1>如果j大于等于50,则必有一个节点,其生成次数于j的差大于50,把这个节点的信息改为num的相应信息.<2>如果j小于50,则在链表的尾部新建一个num节点.

[此贴子已经被作者于2006-8-6 18:56:12编辑过]


----------------解决方案--------------------------------------------------------
时间函数配合求余函数即可办到,不过要保证50次之内不能重复,就应该把以前生成的数存起来,如果当前生成的数已经出现过,则此次数无效.这个存储结构选队列应该要好点.
----------------解决方案--------------------------------------------------------

谢谢,我明白了!


----------------解决方案--------------------------------------------------------
  相关解决方案