简单问题,不一定能回答:rand()有机会能返回1值吗?

samyoung36 2004-01-13 10:54:09
rand()有机会能返回1值吗?有人试过吗?
...全文
130 14 打赏 收藏 转发到动态 举报
写回复
用AI写文章
14 条回复
切换为时间正序
请发表友善的回复…
发表回复
samyoung36 2004-01-14
  • 打赏
  • 举报
回复
分数给不了,抱歉
samyoung36 2004-01-14
  • 打赏
  • 举报
回复
如果需要均等机会的返回1或者2,于是就返回 ((d=(rand()%2))==3 ?1:d) ??
不过1的机会就多那么一丁点了。
suncfboy 2004-01-13
  • 打赏
  • 举报
回复
可以。

参见<Cpp programming language>

我以前碰到过。
dddd8888 2004-01-13
  • 打赏
  • 举报
回复
没碰到过
hell190109 2004-01-13
  • 打赏
  • 举报
回复
从文档的字句上看可以返回1.0
robertnet 2004-01-13
  • 打赏
  • 举报
回复
rand()取余后才能得个具体范围的值。
redhat_xu 2004-01-13
  • 打赏
  • 举报
回复
当然能够返回,如果实在不行了,可以采用下面的办法。
void rand()
{
float i;
randomize();
i=rand()/100;
cout<<i<<endl;
}
范围是[0,1)。
sevencat 2004-01-13
  • 打赏
  • 举报
回复
为什么不看一下原代码呢。这是VC的单线程中RAND的实现代码。
/***
*int rand() - returns a random number
*
*Purpose:
* returns a pseudo-random number 0 through 32767.
*
*Entry:
* None.
*
*Exit:
* Returns a pseudo-random number 0 through 32767.
*
*Exceptions:
*
*******************************************************************************/

static long holdrand = 1L;

return(((holdrand = holdrand * 214013L + 2531011L) >> 16) & 0x7fff);
freshhand 2004-01-13
  • 打赏
  • 举报
回复
同意楼上兄弟的发言
theHunter 2004-01-13
  • 打赏
  • 举报
回复
srand( (unsigned)time( NULL ) );
while(rand()!=1)
{
}
printf("return 1");
boyate 2004-01-13
  • 打赏
  • 举报
回复
能!
rand()返回一个0到int型的最大值,当然包括1啦!
如果你需要一个0~100的数,你可以这么写:int result = rand()%100;
通过类似上面的方法就能得到0~1的数
Java和C++不同,Java的rand()返回一个0~1的数(具体是大于等于0小于1还是是大于0小于等于1就不记得了)

PS:(这句话不敢保证完全的正确,因为时间久了)记得以前在那本书上看到:rand()是读取系统的时间(秒,把小时分钟都换算成秒)然后取sin值得到的
liuwenbo_wenbo 2004-01-13
  • 打赏
  • 举报
回复
是不可以,错了,范围是[0,1)
liuwenbo_wenbo 2004-01-13
  • 打赏
  • 举报
回复
可以返回1,范围是[0,1)
luckysky 2004-01-13
  • 打赏
  • 举报
回复
msdn上的解释:The rand function returns a pseudorandom integer in the range 0 to RAND_MAX
LINGO是用来求解线性和非线性优化问题的简易工具。LINGO内置了一种建立最优化模型的语言,可以简便地表达大规模问题,利用LINGO高效的求解器可快速求解并分析结果。 §1 LINGO快速入门 当你在windows下开始运行LINGO系统时,会得到类似下面的一个窗口: 外层是主框架窗口,包含了所有菜单命令和工具条,其它所有的窗口将被包含在主窗口之下。在主窗口内的标题为LINGO Model – LINGO1的窗口是LINGO的默认模型窗口,建立的模型都都要在该窗口内编码实现。下面举两个例子。 例1.1 如何在LINGO中求解如下的LP问题: 在模型窗口中输入如下代码: min=2*x1+3*x2; x1+x2>=350; x1>=100; 2*x1+x2<=600; 然后点击工具条上的按钮 即可。 例1.2 使用LINGO软件计算6个发点8个收点的最小费用运输问题。产销单位运价如下表。 单 位 销地 运 价 产地 B1 B2 B3 B4 B5 B6 B7 B8 产量 A1 6 2 6 7 4 2 5 9 60 A2 4 9 5 3 8 5 8 2 55 A3 5 2 1 9 7 4 3 3 51 A4 7 6 7 3 9 2 7 1 43 A5 2 3 9 5 7 2 6 5 41 A6 5 5 2 2 8 1 4 3 52 销量 35 37 22 32 41 32 43 38 使用LINGO软件,编制程序如下: model: !6发点8收点运输问题; sets: warehouses/wh1..wh6/: capacity; vendors/v1..v8/: demand; links(warehouses,vendors): cost, volume; endsets !目标函数; min=@sum(links: cost*volume); !需求约束; @for(vendors(J): @sum(warehouses(I): volume(I,J))=demand(J)); !产量约束; @for(warehouses(I): @sum(vendors(J): volume(I,J))<=capacity(I)); !这里是数据; data: capacity=60 55 51 43 41 52; demand=35 37 22 32 41 32 43 38; cost=6 2 6 7 4 2 9 5 4 9 5 3 8 5 8 2 5 2 1 9 7 4 3 3 7 6 7 3 9 2 7 1 2 3 9 5 7 2 6 5 5 5 2 2 8 1 4 3; enddata end 然后点击工具条上的按钮 即可。 为了能够使用LINGO的强大功能,接着第二节的学习吧。 §2 LINGO中的集 对实际问题建模的时候,总会遇到一群或多群相联系的对象,比如工厂、消费者群体、交通工具和雇工等等。LINGO允许把这些相联系的对象聚合成集(sets)。一旦把对象聚合成集,就可以利用集来最大限度的发挥LINGO建模语言的优势。 现在我们将深入介绍如何创建集,并用数据初始化集的属性。学完本节后,你对基于建模技术的集如何引入模型会有一个基本的理解。 2.1 为什么使用集 集是LINGO建模语言的基础,是程序设计最强有力的基本构件。借助于集,能够用一个单一的、长的、简明的复合公式表示一系列相似的约束,从而可以快速方便地表达规模较大的模型。 2.2 什么是集 集是一群相联系的对象,这些对象也称为集的成员。一个集可能是一系列产品、卡车或雇员。每个集成员可能有一个或多个与之有关联的特征,我们把这些特征称为属性。属性可以预先给定,也可以是未知的,有待于LINGO求解。例如,产品集中的每个产品可以有一个价格属性;卡车集中的每辆卡车可以有一个牵引力属性;雇员集中的每位雇员可以有一个薪水属性,也可以有一个生日属性等等。 LINGO有两种类型的集:原始集(primitive set)和派生集(derived set)。 一个原始集是由一些最基本的对象组成的。 一个派生集是用一个或多个其它集来定义的,也就是说,它的成员来自于其它已存在的集。 2.3 模型的集部分 集部分是LINGO模型的一个可选部分。在LINGO模型中使用集之前,必须在集部分事先定义。集部分以关键字“sets:”开始,以“endsets”结束。一个模型可以没有集部分,或有一个简单的集部分,或有多个集部分。一个集部分可以放置于模型的任何地方,但是一个集及其属性
VF课程设计点名系统-VF课程设计-VisualFoxPro课程设计-VFP课程设计 点名系统方案设计 1、课程设计的目的 数据库基础及应用是一门实用性很强的学科,是进行软件开发的主要基础。只有进行 实际操作,才能将理论知识和实际应用有机地结合起来,锻炼学生分析解决问题得能力 ,提高学生实际运用的技能,为日后工作中的软件开发打下良好的基础。 VFP是微软公司推出的关系型数据库管理系统,它是一种地形的第四代计算机语言, VFP全面支持可视化编程和面向对象的编程,是最为使用的数据库管理系统和中小型数据 库应用系统的软件开发之一,它为数据库结构和应用软件开发而设计,是功能强大的面 向对象的软件。本课程设计结合数据库内容,运用VFP设计,使学生掌握数据库基础内容 。 2、需求分析 2.1需求 在大学课堂中,课堂提问是上课环节中不可缺少的部分,也是教师与学生课堂互动,交 流,最直接的方式。但在大学的课堂中缺存在一些问题。 对于学生来说,现在在大学生心理普遍的思想是:"千万别点我!",一旦被老师点到则 :"哎呀妈呀!今天点子真背!那么多人,怎么就点到我了呢?!"。还有一种情况就是 ,有些同学每节课都被提问,有些同学整个学期都得不到一次提问机会。 对于教师来说,同样存在一些提问上的问题。老师每次提问之前都会拿着点名表看了又 看:"点谁好呢?"面对几百人的课堂想在其中"公平的"选出回答问题的同学,这是令我 们教师非常头疼的事情。 针对上述问题,提出程序设计需求如下: (1)此程序可以公平的选出提问的同学 (2)此程序可以排除掉已经被提问过的同学 (3)此程序可以从提问次数少的同学中选一同学 (4)此程序可以为多个班级的同学提供点名服务 (5)此程序最后可以打印出一个学期整体提问次数和分数 (6)此程序可以提供最多的点名次数不少于15次 2.2分析 首先,内部程序需要班级名次表作为点名表;对于公平的提问这一需求,可以使用VF自 带的随机数函数,随机数函数可以返回一个随机,将这个随机作为学号来进行提问 。每个班级每节课都配置一张提问表,这样就可以为多个班级多个课程提供点名服务。 其次,对于"排除提问过的同学"这一需求可以这样满足:将点名表增加一个特殊的字段 ,把提问过的同学对应的字段做标记,用判断语句判断如果特殊字段已经做了标记则下 次不在提问。对于"从提问次数少的同学中选一个"需求可以这样满足:在点名表中增加 一个次数字段,每次点名到时,将次数字段增加1次,点名时先中表中找到次数字段最少 的同学提问,在使用随机函数随机选出一名同学。 最后,在程序中增加报表功能,报表中包括次次数、总分等满足需求,对于"次数不 少于15次"的需求,可以将表增加序列次数字段,每次提问都将获得的分数存放到相应的 次数中。 3、设计方案论证 3.1系统结构 3.2核心算法 3.2.1随机数算法 在本程序中多次用到了随机函数,在VF中的rand()函数只能返回(0,1)之间的随机 数,并不能返回我们需要的"学号",因此我们必须对rand()函数做适当的操作,使其返 回我们需要的"学号"。分析,假如一个班级有40名同学,那么随机数算法给我们返回的 数的范围一定是在0~40之间。假如一个班级有100名同学,那么随机数算法给我们返回的 数的范围一定是在0~100之间。因此根据数学算法,将rand()进行变形。 X=int(10000*rand()%(max-mix)+mix) 其中,max为序列的最大,mix为序列的最小,X为返回的随机数。 如,一个班级有40人,则max的就为40,mix的就为1。则X返回的随机数一定在0~40 之间。 3.2.2随机查找算法 在随机输出"学号"时,有一种情况是我们没有考虑到的:当2个或者很多个同学回答的都 没被提问过。换句话说,有n个同学的次数字段相同!那么我们就需要从这些回答次数相 同的同学中随机的选择一个!具体算法程序如下,其中X为查找的次数字段。 located for cishu==X if found() skip int(10000*rand()%(mixx-1)+1) cont endif if found() 显示此名同学的信息,定位指针 else go top located for cishu==0 if found() 显示此名同学的信息,定位指针 endif endif 下面的流程图会帮助理解随机查找算法 图1:随机查找算法流程图 3.2.3中介表思想 在需求中教师不只是教一个班级,还有很多个班级,很多课要教,对点名模块的设计绝 对不能只对一个表操作,一定要有很多张表,且可以随意切换,用户选择哪张表,就点 哪张表内的同学。首先,将用户选择的表所对应的表名存进一张"中介表"中;点名时在 从"中介表"中"拿"出

64,646

社区成员

发帖
与我相关
我的任务
社区描述
C++ 语言相关问题讨论,技术干货分享,前沿动态等
c++ 技术论坛(原bbs)
社区管理员
  • C++ 语言社区
  • encoderlee
  • paschen
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
  1. 请不要发布与C++技术无关的贴子
  2. 请不要发布与技术无关的招聘、广告的帖子
  3. 请尽可能的描述清楚你的问题,如果涉及到代码请尽可能的格式化一下

试试用AI创作助手写篇文章吧