实验十 枚举问题(过程模拟)

实验名称:实验十 枚举问题(过程模拟)

实验目的:熟练掌握一些枚举问题的处理方法。

实验内容:

  1. 问题描述:(猴子选大王问题)有n只猴子选大王,按顺时针方向围成一个圈,猴子编号为1~n,从第1号开始报数,一直报到m的猴子退出圈外,剩下的猴子再接着从1开始报数,这样直到圈内只剩下一只猴子时,这只猴子就是大王。

输入:输入只有一行,为两个正整数n和m(n和m小于100)。

输出:输出为一个整数,为选出大王的编号。

输入样例

8       5

输出样例

3        

  1. 问题描述:(泊松分酒问题)某人有一瓶12升的酒,同时有容积为5升和8升的空杯各一个。借助这两个空杯,如何将12升的酒平分?

一般性描述:借助于容量分别为bv和cv的两个空杯,将总容量为偶数a的酒平分,输出分酒的步骤。其中正整数bv、cv、a由键盘输入。

  1. 问题描述:(发扑克牌)在计算机上玩扑克牌是一种常见的游戏,现在按照玩升级的规则,模拟为4个玩家发牌,打印出每个玩家的12张牌和6张底牌。
  2. 问题描述:(乒乓球)国际乒联主席沙拉拉自从上任以来就立志于推行一系列改革,以推动乒乓球运动在全球的普及。其中11分制改革引起了很大的争议,有部分球员因为无法适应新规则只能选择退役。华华就是其中一位,他退役之后从事于乒乓球研究工作,力求弄明白11分制和21分制对选手的不同影响。在开展他的研究之前,首先需要对他多年比赛的统计数据进行一些分析,所以需要你的帮忙。华华通过以下方式进行分析,首先将比赛时每个球的胜负列成一张表,然后分别计算在11分制和21分制下,双方的比赛结果。如现在有这样一份记录,其中w表示华华获得一分,L表示华华对手获得一分:WWWWWWWWWWWWWWWWWWWWWWLW在11分制下,此时比赛的结果是华华第一局11:0获胜,第二局11:0获胜,正在进行第3局,当前比分为1:1。而在21分制下,此时比赛结果是华华第一局21:0获胜,正在进行第二局,比分为2:1。如果一局比赛开始,则此时比分为0:0。你的程序就是要对一系列比赛信息的输入(W和L形式)输出正确的结果。

输入:输入包含若干行字符串(每行至多为20个字母),字符串由大写的W、L和E组成。其中E表示比赛信息结束,程序应该忽略E之后的所有内容。

输出:输出由两部分组成,每部分有若干行,每一行对应一局比赛的比分(按比赛信息输入顺序)。其中,第一部分是11分制下的结果,第二部分是21分制下的结果,两部分之间由一个空行分隔。

输入样例

WWWWWWWWWWWWWWWWWWWW

WWLWE                              

输出样例

11:0    

11:0    

1:1     

21:0    

2:1     

实验结果与分析(运行界面截图,打开需要截的图,按ALT+PrintScreen后,将光标移到下面,单击右键后选择“粘贴”):

 1.

(Ⅰ)程序代码及注释

#include <stdio.h>

int main(int argc, char *argv[])

{

int n,m,i,p,k,w[100];

scanf("%d%d",&n,&m);

for(i=0;i<n;i++)

w[i]=i+1;

i=0;k=1;p=0;

while(p<n-1)

{

if(w[i]==-1)

{

i=(i+1)%n;

continue;

}

if(k==m)

{

w[i]=-1;

p++;

k=0;

}

k++;

i=(i+1)%n;

}

for(i=0;i<n;i++)

if(w[i]!=-1)

{

printf("%d\n",w[i]);

break;

}

}

(Ⅱ)运行结果窗口截图(窗口适当缩小)和分析

2.

(Ⅰ)程序代码及注释

#include <stdio.h>

int main(int argc, char *argv[])

{

int a,b,c,bv,cv,R,n;

scanf("%d%d%d",&a,&bv,&cv);

R=a/2;

b=c=0;n=0;

while(!(a==R||b==R||c==R))

{

if(!b)

{

if(a<bv)

{

n=-1;

break;

}

else

{

a-=bv;

b=bv;

}

}

else if(c==cv)

{

a+=cv;

c=0;

}

else if(b>cv-c)

{

b-=cv-c;

c=cv;

}

else

{

c+=b;

b=0;

}

n++;

printf("%d %d %d\n",a,b,c);

}

printf("%d\n",n);

}

(Ⅱ)运行结果窗口截图(窗口适当缩小)和分析

3.

(Ⅰ)程序代码及注释

#include <stdio.h>

#include <stdlib.h>

#include <time.h>

int main(int argc, char *argv[])

{

int x,y,a[55],i,j,z,fg;

char d[]={"xA1234567891JQK"};

srand((unsigned int)time(NULL));

for(i=0;i<54;i++)

{

while(1)

{

x=rand()%4+1;

y=rand()%14;

z=x*100+y;

if(z==300||z==400)continue;

fg=0;

for(j=0;j<i;j++)

if(z==a[j]){fg=1;break;}

if(fg==0)break;

}

a[i]=z;

}

printf("\n%8c%8c%8c%8c",'E','S','W','N');

for(i=0;i<54;i++)

{

if(i%4==0)printf("\n");

if(i==48)printf("\n------\n");

if(a[i]==100||a[i]==200)

printf("%8c",a[i]/100);//king

else if(a[i]%100==10)

printf("%6c10",a[i]/100+2);//suits&point10

else

printf("%7c%c",a[i]/100+2,d[a[i]%100]);//suits&points

}

printf("\n");

}

(Ⅱ)运行结果窗口截图(窗口适当缩小)和分析

4.

(Ⅰ)程序代码及注释

#include <stdio.h>

#include <math.h>

int main(int argc, char *argv[])

{

int i,k,a1,a2,b1,b2;

char rslt[400][2],ch;

a1=a2=b1=b2=0;k=0;

while(1)

{

ch=getchar();

if(ch=='W')

{

a1++;b1++;

}

if(ch=='L')

{

a2++;b2++;

}

if((a1>=11||a2>=11)&&(abs(a1-a2)>1)||ch=='E')

{

printf("%d:%d\n",a1,a2);

a1=a2=0;

}

if((b1>=21||b2>=21)&&(abs(b1-b2)>1)||ch=='E')

{

rslt[k][0]=b1;

rslt[k][1]=b2;

k++;

b1=b2=0;

}

if(ch=='E')break;

}

printf("\n");

for(i=0;i<k;i++)

printf("%d:%d\n",rslt[i][0],rslt[i][1]);

}

(Ⅱ)运行结果窗口截图(窗口适当缩小)和分析

  • 26
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值