广告广告
  加入我的最爱 设为首页 风格修改
首页 首尾
 手机版   订阅   地图  繁体 
您是第 8361 个阅读者
 
发表文章 发表投票 回覆文章
  可列印版   加为IE收藏   收藏主题   上一主题 | 下一主题   
对的人
个人头像
个人文章 个人相簿 个人日记 个人地图
特殊贡献奖
初露锋芒
级别: 初露锋芒 该用户目前不上站
推文 x0 鲜花 x228
分享: 转寄此文章 Facebook Plurk Twitter 复制连结到剪贴簿 转换为繁体 转换为简体 载入图片
推文 x0
[C/C++][求助] 随机取数,该如何不让它重复
各位大大好^^,我刚学程式不久,有许多问题,还需要大大多多帮忙^^。

像我这个随机取数,如果想要让他不出现重复的号码,该怎做? 麻烦大大给点迷津,谢谢。

#include<iostream.h>
#include<stdlib.h>
void main()
{
int i,a;
char o; ..

访客只能看到部份内容,免费 加入会员 或由脸书 Google 可以看到全部内容



献花 x0 回到顶端 [楼 主] From:台湾亚太线上 | Posted:2006-12-28 00:08 |
codeboy 手机
个人文章 个人相簿 个人日记 个人地图
社区建设奖
小有名气
级别: 小有名气 该用户目前不上站
推文 x6 鲜花 x331
分享: 转寄此文章 Facebook Plurk Twitter 复制连结到剪贴簿 转换为繁体 转换为简体 载入图片

先把得到的乱数存起来..取一个就去比对之前的阵列里是不是已经有同样的数字
如果已经有了,就重新再去取一次....一直循环到你需要的量~ 表情



连结有问题请来信,我会尽快修正~^^
通报时请附上是"哪一篇失效"...这样我才能去修正~麻烦各位好心人士了~

[连结失效通报][ 网页.伺服.程式 讨论区]
----------------------在世界中心呼喊爱情----------------------
深深思念一个人的时候,我们不知不觉的地活在世界的中心...
献花 x0 回到顶端 [1 楼] From:未知地址 | Posted:2006-12-29 17:52 |
drizztkuo
数位造型
个人文章 个人相簿 个人日记 个人地图
路人甲
级别: 路人甲 该用户目前不上站
推文 x0 鲜花 x2
分享: 转寄此文章 Facebook Plurk Twitter 复制连结到剪贴簿 转换为繁体 转换为简体 载入图片

介绍以前用过一个方式,类似洗排的方法。(很久没写程式了!用字遣词可能不太精准)
先确认需要的随机数长度n,例如:要取200个3码长的乱数,但是这两百个乱数不能重复。
其大概作法如下:
1. 先设定000 ~ 999的数列(因为需要三码)
2. 以random方式调换该数列中各元素的次序,例如调换1000次。
3. 依序取出该数列中前200个元素,保证不会重复。
此方式的好处是确保该程序的执行时间固定(仅受n影响),不会有运气不佳而需要多取几次的情况。

此文章被评分,最近评分记录
财富:40 (by codeboy) | 理由: 这也是一个好方法..^^


献花 x0 回到顶端 [2 楼] From:台湾 | Posted:2007-01-03 17:34 |
tr99632 手机
个人文章 个人相簿 个人日记 个人地图
小人物
级别: 小人物 该用户目前不上站
推文 x0 鲜花 x17
分享: 转寄此文章 Facebook Plurk Twitter 复制连结到剪贴簿 转换为繁体 转换为简体 载入图片

阿哈哈哈~
好死不死 前几天在图书馆里翻到一本书
上面刚好就有取乱数不重复的范例 XD

书名:C&C++完美的演译
作者:松桥工作室

范例是给大乐透取7个号码

复制程式
#include<iostream.h>
#include<stdlib.h>
#include<time.h>
void main()
{
       srand(time(NULL));
       int max=49;
       int n[49]={0};
       int x[7]={0};
       for(int i=0;i<max;i++)//将1~49灌入 阵列n[]里面
              n[i]=i+1;
       for(int j=0;j<7;j++)//取7个数字
       {
              int choice;
              choice=rand()%max;
              x[j]=n[choice];//随机将n[]阵列里的一个数字给予x[]
              for(int k=choice;k<max;k++)       //进行递补
                     n[k]=n[k+1];
              max--;
       }
       for(int s=0;s<7;s++)
              cout<<x[s]<<"  "<<endl;
//       for(i=0;i<49;i++)
//              cout<<"n["<<i<<"]= "<<n[i]<<endl;
}


方法就是
先随机将n[]阵列里的一个数字给予x[]
然后将n[]阵列中 被抽出的数字后面的数字通通往前递补一格

给个例子:
1.
choice取乱数得到3
2.
x[0]=n[3]
此时x[0]=4
3.
n[]进行递补动作

n[3]=n[4]
n[4]=n[5]
n[5]=n[6]
n[6]=n[7]
n[7]=n[8]
.........

此时的
n[]阵列为:复制程式
n[0]n[1]n[2]n[3]n[4]n[5]n[6]n[7]...n[46]n[47]n[48]
   1    2    3     5    6    7    8     9       48     49    49

x[]阵列为:复制程式
x[0]x[1]x[2]x[3]x[4]x[5]x[6]
   4    0    0    0    0    0    0

4.
因为n[]阵列进行过递补
所以max要减1

5.继续取乱数


献花 x0 回到顶端 [3 楼] From:台湾台北市 | Posted:2007-01-13 01:34 |

首页  发表文章 发表投票 回覆文章
Powered by PHPWind v1.3.6
Copyright © 2003-04 PHPWind
Processed in 0.015110 second(s),query:16 Gzip disabled
本站由 瀛睿律师事务所 担任常年法律顾问 | 免责声明 | 本网站已依台湾网站内容分级规定处理 | 连络我们 | 访客留言