XiaoHui.net 笑汇程序员论坛首页
工作并快乐着,职业并休闲着
寻梦的岁月从不言辛苦几许,
不问收获几多……
» 游客:  申请新用户 | 登录 | 会员 | 统计 | 帮助 » XiaoHui.Net 笑汇程序员论坛 | 纯文字版 | 全站索引 | XiaoHui.com


[算法讨论] 有没有人玩过这个游戏?

RSS 订阅当前论坛  

上一主题 下一主题
     

标题: [算法讨论] 有没有人玩过这个游戏?  
 
含泪的微笑
传说中的水手
Rank: 5Rank: 5


UID 29980
精华 0
积分 4
帖子 4
阅读权限 1
注册 2007-4-19
状态 离线
有没有人玩过这个游戏?

喝酒的时候有没有玩过一个游戏

一个人写个数字 其他的人猜 轮班猜
如果谁猜对了 谁就得喝酒

每个数字猜1000次  输出被猜中的频率

请问哪条语句有问题,为什么是死循环

#include<iostream.h>
#include<stdlib.h>
#include<dos.h>
int main()
{
int max=100,min=1,i,k,n;
  struct time t;
   gettime(&t);
   srand(t.ti_hund);
  for(k=1;k<101;k++)
  {
    n=0;
   for(i=0;i<1000;i++)
   {
    while(min<max)
    {
     int temp=rand()%(max-min+1)+min;
     if(temp>k) max=temp-1;
     if(temp<k) min=temp+1;
     if(temp==k)  {n++;break;}
      n++;
     }
     cout<<n/1000.0;
    }
  }
  getchar();
        return 0;
}
2007-5-1 21:53#1
查看资料  Blog  发短消息  顶部
 
闪闪亮
传说中的水手
Rank: 5Rank: 5


UID 20678
精华 0
积分 258
帖子 258
阅读权限 1
注册 2001-1-25
状态 离线
想一想你的这几条语句吧:

while(min<max)
    {
     int temp=rand()%(max-min+1)+min;
     if(temp>k) max=temp-1;
     if(temp<k) min=temp+1;
     if(temp==k)  {n++;break;}
      n++;
     }
如果有死循环,那么死循环就出在 while  身上.


闪亮你我的心...
2007-5-2 09:06#2
查看资料  Blog  发短消息  顶部
 
含泪的微笑
传说中的水手
Rank: 5Rank: 5


UID 29980
精华 0
积分 4
帖子 4
阅读权限 1
注册 2007-4-19
状态 离线
不好意思

我撤销

[ 本帖最后由 含泪的微笑 于 2007-5-12 20:18 编辑 ]
2007-5-2 20:53#3
查看资料  Blog  发短消息  顶部
 
iceeden
该用户已被删除









*** 作者被禁止或删除 内容自动屏蔽 ***
2007-5-5 11:45#4
顶部
 
含泪的微笑
传说中的水手
Rank: 5Rank: 5


UID 29980
精华 0
积分 4
帖子 4
阅读权限 1
注册 2007-4-19
状态 离线
我知道了正确答案
正确的是:
#include<iostream.h>
#include<stdlib.h>
#include<dos.h>
int main()
{
int max,min,i,k,n;
  struct time t;
   gettime(&t);
   srand(t.ti_hund);
  for(k=1;k<101;k++)
  {
    n=0,max=100,min=1; //每猜一个数时都应该是在1到100之间的
  for(i=0;i<1000;i++)
   {
    while(min<max)
    {
     int temp=rand()%(max-min+1)+min;
     if(temp>k) max=temp-1;
     if(temp<k) min=temp+1;
     if(temp==k)  {n++;break;}
      n++;
     }
     cout<<n/1000.0;
    }
  }
  getchar();
        return 0;
}
每个数字猜1000次,但是每次必须猜中,最后输出的是猜中的平均次数
例如:猜测 50时,第一次用了5次猜中,第二次用了10次……直到第1000次用了8次
最后输出的是(5+10+…+8)/1000.0
所以while 是必须的

[ 本帖最后由 含泪的微笑 于 2007-5-7 17:07 编辑 ]
2007-5-7 17:01#5
查看资料  Blog  发短消息  顶部
 
brucellllllll
小水手
Rank: 1



UID 30072
精华 0
积分 10
帖子 10
阅读权限 10
注册 2007-5-9
状态 离线
1. 假设k=1, 如果第一个随机数temp出来的值恰巧是2,那么就会在if( temp > k )这一句把max设成1,然后while循环条件不满足,直接跳出。这样其实少算了一次。
2. cout输出有问题,不仅位置错误,而且没有分隔符
3. 如果你什么都懂,就不要问问题了。如果你来问问题,最好对回答的人客气点。


http://www.cpper.com/c/
2007-5-9 17:53#6
查看资料  Blog  发短消息  顶部
     


  可打印版本 | 推荐给朋友 | 订阅主题 | 收藏主题  


 


所有时间为 GMT+8, 现在时间是 2008-12-2 05:34 Powered by Discuz! 4.1.0 清除 Cookies - XiaoHui.Net 笑汇程序员论坛 - Archiver