卡片游戏及解答程序

转载 2006年06月23日 15:24:00
卡片游戏
程序文件名: card.cpp/card.pas/...
  NKPC竞赛的选手小金和小李经常玩一个小游戏。
  这个游戏规则很简单:
  小金在手里拿着N张卡片,每张卡片上写着一个正整数。
  小李知道卡片上的数都是不同的,但他不知道哪个是最大值。
  游戏一开始,小金任意地抽出一张卡片给小李看,并且问小李"这个数字是不是最大的?"
  如果小李回答"",那么游戏结束;否则小再重新抽出一张不同的卡片,重复上面的问题。
  当小金手里只剩最后一张卡片时,那么小李只能回答""
  如果小李恰好猜中了最大值,也就是当小金抽出那张最大的数字,小李回答"",他就赢了。
  最近, 小李想出了一个找到最大值的好方法:
  对第一张到第M(1<=M<N)张卡片都回答""
  然后,从第M+1张开始,若当前卡片上的数比以前出现过的所有数都大, 那么回答""; 否则回答""
  也许你已经注意到, 在小李的方法中最重要的是如何取M的值。
  你的目标是编一个程序来帮小李找到最好的M, 即让小李以最大的概率赢得这个游戏。
 
输入(请使用标准输入输出,而不要读写文件)
  只有一个整数N (3<=N<=100000) 
输出(请使用标准输入输出,而不要读写文件)
  输出为一个整数M ,表示使得效力获胜概率最大的M 
样例输入1
样例输出1
3
1
样例输入2
样例输出2
5
2

 

#include <stdlib.h>
#include <stdio.h>
#include <iostream.h>
#include <time.h>
#include <dos.h>
#include <string.h>

#define NUMBER  100000
int a[NUMBER][100];
int n=1000;
int N=5;

void initiala()
{
 time_t t;
 t=time(NULL);
 clock_t goal;
 srand((unsigned)t);
 for(int i=0;i<100;i++)
 {
  for(int j=0;j<NUMBER;j++)
  {
   a[j][i]=rand()%n;   
  }
  goal = 71 + clock();
  while( goal > clock() );
  cout<<"/1 ";
  if(i%10==9)
    cout<<i+1<<"%"<<endl;
 }
}

bool cmpi(int i,int m)//处理a[i],前m个.
{
 int mmax,max=0;
 bool flag=false;
 mmax=a[i][0];
    for(int j=1;j<N;j++)
 {
        if(a[i][j]>mmax&&j<m)//找到前m个的最大值
  {
      mmax=a[i][j];
   max=mmax;
  }
  else if(a[i][j]>max&&!flag)//把m个后的第一个比mmax大的值给max
  {
   max=a[i][j];
   flag=true;
  }
  else if(a[i][j]>max&&flag)//返回false
   return false;

 }
 if(!flag)
  return false;
 return true;
}

int dealm(int m)//取m时成功的个数,总共有100个数列
{
 int suc=0;
 for(int i=0;i<NUMBER;i++)
             if(cmpi(i,m)) suc++;
   return suc;
}

void main()
{
 int index=0;
 int big=0;
 int temp=0;
 char ch[10];
 memset(ch,0,10);
 clock_t goal;
   cout<<"初始化序列..."<<endl;
   initiala();
   cout<<"输入N,(1<N<100):"<<endl;
   cin>>N;
  start:
    big=0;
   for(int i=1;i<N;i++)
    {
           goal=clock();
     temp=dealm(i);
     if(temp>big)
     {
      big=temp;
      index=i;
     }
     if(i*100/N%1==0)    //输出进度
           if(clock()-goal>5)
        cout<<(i*100/N+1)<<"%"<<endl;
    }
     cout<<"成功率: "<<(float)big/(NUMBER/100)<<"%"<<endl;
  cout<<"选择的最佳m="<<index<<endl;
     cout<<"继续计算请输入数字:"<<endl;
  cin>>ch;
  int k=0;
  if(ch[0]>'0'&&ch[0]<='9')
  {
   N=0;
   while(ch[k]!='/0')
   {
             N=N*10+ch[k]-'0';
    k++;
   }
   memset(ch,0,10);
   goto start;
  }
  cout<<"Press any key to end!"<<endl;
  getchar();
}

 

                  

 

卡片游戏-程序设计实例(Java)

题目:        桌上有一叠牌,从第一张牌(即位于顶面的牌)开始从上往下依次编号1~n。当至少还剩下两张牌时进行以下操作:把第一张牌扔掉,然后把新的第一张牌放到整叠牌的最后,输入n,输出每次扔掉...
  • tan313
  • tan313
  • 2015年06月18日 21:10
  • 948

队列之卡片游戏

桌上有叠牌,从第一张牌(即位于顶面的牌)开始从上往下依次编号为1~n。当至少还剩两张牌时进行以下操作:把第一张牌扔掉,然后把新的第一张放一整叠牌的最后。输入n,输出每次扔掉的牌,以及最后剩下的牌。 ...
  • bingsanchun1
  • bingsanchun1
  • 2013年07月28日 10:23
  • 1424

zzuoj-10451: 数字卡片游戏

传送门动态规划问题 f[i][j]表示剩下区间[i,j]后,取完该区间所有卡片的最优解差值。规定值为正数表示,A胜; 若下一张卡片为A取,则dp[i][j] = max(dp[i+1][j]+nu...
  • qq_21120027
  • qq_21120027
  • 2016年03月27日 15:24
  • 284

[cogs2525][树状数组]卡片游戏

【题目描述】小D举办了元旦联欢活动,其中有一个卡片游戏。 游戏的规则是这样的:有n张卡片,每张卡片上正面写着一个小于等于100的正整数a i ,反面都是一样的花色。这n张卡片正面朝下叠成一堆,玩这个...
  • JustPenz233
  • JustPenz233
  • 2016年11月04日 21:25
  • 410

组合游戏学习

阅读了《由感性认识到理性认识——透析一类搏弈游戏的解答过程》、《解析一类组合游戏》、《组合游戏略述——浅谈SG游戏的若干拓展及变形》这三篇论文,对组合游戏以及SG函数有了更深的理解。这篇文章摘下了这三...
  • gnsydss
  • gnsydss
  • 2015年01月06日 13:07
  • 257

NYOJ 905 卡片游戏

卡片游戏 时间限制:1000 ms  |  内存限制:65535 KB 难度:1 描述小明最近宅在家里无聊,于是他发明了一种有趣的游戏,游戏道具是N张叠在一起的卡片,每张卡片...
  • u012804490
  • u012804490
  • 2014年07月17日 15:32
  • 699

hdu 4550 卡片游戏 放卡片放出最小数字 模拟好题

卡片游戏 Time Limit: 3000/1000 MS (Java/Others)    Memory Limit: 65535/32768 K (Java/Others) Total Submi...
  • hnust_xiehonghao
  • hnust_xiehonghao
  • 2013年07月07日 17:17
  • 1653

Javascript构建Bingo卡片游戏

预备知识点: 1、 “< table >”表示表格, “< tr >”表示表格的开始一行, “< th>”表示表格中列的标题单元格, “< td>”表示表格中的每个单元格 2、常用的字符含...
  • shursulei
  • shursulei
  • 2017年02月08日 15:10
  • 869

hdu 卡片游戏

卡片游戏 Problem Description   小明最近宅在家里无聊,于是他发明了一种有趣的游戏,游戏道具是N张叠在一起的卡片,每张卡片上都有一个数字,数字的范围是0~9,游戏规则如下:   首...
  • fsqfang
  • fsqfang
  • 2014年12月12日 21:32
  • 336

蓝桥杯 卡片换位

卡片换位 你玩过华容道的游戏吗? 这是个类似的,但更简单的游戏。 看下面 3 x 2 的格子 +---+---+---+ | A | * | * | +---+---+---+ | B |  ...
  • kala0
  • kala0
  • 2016年08月07日 19:55
  • 1445
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:卡片游戏及解答程序
举报原因:
原因补充:

(最多只允许输入30个字)