61阅读

抽签游戏-抽条游戏

发布时间:2018-02-02 所属栏目:概率

一 : 抽条游戏

  

  晚上我正在做作业,突然作业本上掉出一张纸,我想用这张纸做什么呢?我左思右想把写作业的事都忘了。突然有了灵感,那就写几个纸条和妈妈一起玩,于是我便写了起来,有的纸条上写着蹲着跑步一圈或两圈,有的写上踢键子十个,有的跑步三圈等等一些平常我们做游戏的内容。

  开始玩了,我先抽条,我挑来挑去不知道哪个好,随便拿了一个是青蛙跳十下,于是我毫不犹豫地跳十下,感觉很累,接着妈妈也抽了个青蛙跳十下,妈妈也跳了十下,然后我们又抽条,是表演节目,我大方地讲了个笑话,把妈妈逗得直不起腰来……

  我们就这样来回地玩,时间过得真快,已经到睡觉时间了,妈妈还让我写一篇日记,于是我就拿起笔写了这篇有趣的抽条游戏。

郑重声明:本文系作者独家授权,版权归作者及61阅读所有,任何媒体未经许可不得转载!

二 : 抽签游戏

今天,我跟姐姐在书房里做作业。

多无聊呀!我想来点好玩的。突然,我灵机一动:“姐姐(www.61k.com],我们来抽签吧!”“抽什么签呀?”“怎么抽?”我神秘地说:“跟摸彩球一样。摸到同样颜色的球5个,就中大奖!”“什么大奖?”姐姐两眼发光。“不告诉你。”我还是一脸神秘,“先开工吧!”我们首先撕了一些黄纸和白纸,然后放在一个铁盒子里,再摇一摇,便大功告成了。我们依次从里面拿出一张张纸条来。我先抽,结果抽了两张黄色,一张白色,失败了,可是姐姐却一下就抽到了五张颜色相同的纸,她迫不及待地问:“什么大奖?”“可以写一行作业!”姐姐说:“这样啊?那么,我们用这种方式来做作业吧!”于是,我们在欢笑中做完了作业。

三 : 抽签游戏。大扫除,

抽签游戏。大扫除,今天我们抽签决定谁干什么,好吗?
扫地8人
擦桌子4人
擦黑板1人
我最有可能干什么?
题型:解答题难度:中档来源:同步题

扫地


考点:

考点名称:可能性,概率

可能性:
是指事物发生的概率,是包含在事物之中并预示着事物发展趋势的量化指标。有些事件的发生是确定的,有些是不确定的。用“可能”、“不可能”“一定”等表达事物发生的情况。
常见方法有:抛骰子、摸球、转盘。
概率:
又称或然率、机会率或机率、可能性,是数学概率论的基本概念,是一个在0到1之间的实数,是对随机事件发生的可能性的度量。

随机事件:
有些事件在一定的条件下可能发生,也可能不发生,结果不确定。例如,购买彩票能否 中奖,开出的列车能否正点到达。明年今天是否下雨等待,我们称之为随机事件。
我们用随机事件的“概率”来表示随机事件发生可能性大小:概率是0到1之间的一个数,概率随机事件发生的可能性大。
在小学阶段我们只计算最简单的一些随机事件的概率,这种计算方法以“等可能性”为基础。在有些情况下,虽然有些事情的结果是不确定的(随机性的),但是由于某种“对称性”,不同的基本结果发生的可能性是相同的,这时,我们说这些基本结果是等可能的,从而确定相关事件的概率。例如:
投一枚均匀硬币,“出现正面”“出现反面”这两种基本结果是等可能的,所以“出现正面”和“出现反面”的概率都是1/2;
投一枚色子(骰子),“出现1点”“出现2点”......“出现6点”这六种基本情况是等可能的,其概率是1/6 。
对于随机事件,我们关心的是事件发生的可能性。

事件发生的可能性大小是可以比较的,所以人们常说一件事情“不可能”""不大可能”“很可能”“非常可能”“绝对可能”......这些说法反应可能性大小的不同程度。
射击时,“射中十环”的可能性比“射中九环”的可能性小;
一分钟投篮,“投中15个”比“投中10个”的可能性小

四 : 抽签游戏

一、设计目的

熟悉各种数据结构和运算,会使用数据结构的基本操作解决一些实际问题。[www.61k.com)

二、设计要求

(1)重视课程设计环节,用严谨、科学和踏实的工作态度对待课程设计的每一项任务;

(2)按照课程设计的题目要求,独立地完成各项任务,严禁抄袭;凡发现抄袭,抄袭者与被抄袭者皆以零分计入本课程设计成绩。凡发现实验报告或源程序雷同,涉及的全部人员皆以零分计入本课程设计成绩;

(3)学生在接受设计任务后,首先要按设计任务书的要求编写设计进程表;

(4)认真编写课程设计报告。

三、设计内容

1. 问题描述:

抽签是我们日常生活中经常遇到的一件事,并且其形式有很多种。这里介绍一种抽签游戏,如图3所示,最上面一排是游戏的参加者——称为抽签者,最下面一排是签号(奖品、公差等)。每个人依次顺着竖线往下走,当碰到横线时,即转横向前进,碰到竖线再往下,以此类推,则游戏结束后,抽签者会一一对应到最下面一排的签号。

2.基本要求:

(1) 设计存储结构存储抽签者、签号、游戏用横线、竖线等;

(2) 设计算法实现抽签;

(3) 存储游戏的最终结果。 四、参考文献

1.王红梅.数据结构.清华大学出版社

2.王红梅.数据结构学习辅导与实验指导.清华大学出版社

3.严蔚敏,吴伟民.数据结构(C语言版).清华大学出版社

抽签游戏 抽签游戏

抽签游戏 抽签游戏

一、 需求分析

本课程设计的名称是抽签游戏,该设计主要是要通过设计存储结构存储抽签人,签号,中间结果,并通过设计抽签算法进行抽签,抽签以后中间结果数组的次序会发生改变,最后通过中间结果的改变将抽签人和 签号连接起来,实现每一个抽签人对应到一个签号,如果只有一个是奖品也只有一人能抽中。(www.61k.com]

二、 总体设计

1.程序设计组成框图:

抽签游戏 抽签游戏

2.程序设计流程图

1

抽签游戏 抽签游戏

抽签游戏 抽签游戏

抽签游戏 抽签游戏

3.数据结构:

程序共用到四个数组,m[][]用来存放抽签布局,b[]用来存放中间结果,a[]用来存放抽签人编号,p[]用来存放签号,经过抽签函数对b[]进行排序,最后的排序结果用来对应抽签人和签号。[www.61k.com)

三、 详细设计

1. 功能实现:

(1) 设计存储结构存储抽签者、签号、游戏用横线、竖线等;

(2) 设计算法实现抽签;

(3) 存储游戏的最终结果。

2.设计思想:

分析上面的抽签游戏的示例,遇到一条横线,代表这两个竖线的数据就要交换顺序,例如,原来的顺序为{A0, A1, A2, A3, A4},经过第0层横线后,顺序为{A1, A0, A3, A2, A4},再经过第1层横线后,顺

2

抽签游戏 抽签游戏

序为{A1,A3,A0,A2,A4},以此类推,最后顺序为{A4, A1, A0, A2, A3},对应到{p0, p1, p2, p3, p4}。[www.61k.com)在该游戏中,需解决以下问题:

(1) 抽签游戏可以多人参与,只要加上竖线和横线即可。那么,如何表示这些参与者呢?

解决:假设有n个人参加,可以用一个一维数组A[n]来记录n个抽签者。

(2) 签号如何存储?

解决:签号的存储也可设计成一个一维数组p[n]来记录n个签号。

(3) 如何存储游戏的最终结果?

解决:设计一维数组B[n]存储最终的对应结果,同时在执行过程中记载中间结果。

(4) 当碰到某一横线跨在第i条和第i+1条竖线上时,如何交换数据?

解决:用一维数组B[n]来存放游戏过程中的中间结果和最终结果,通过交换B[i]和B[i+1]的值解决交换数据问题。

(5) 如何表示抽签游戏的竖线和横线布局?

解决:设计一个二维数组M[m][n],M[i][j]表示第i层上第j条和第j+1条竖线之间是否有横线,其值为0或1

主函数通过将布局数组m以及抽签经过的层数和参加抽签的人数通过参数传递传进display函数,display函数根据传进来的这些参数,判断m[i][j]的值是否为1,如果为1则在第i行第j列输出一个竖线(“|”)和一个横杠(“一”),为0则输出一个竖线(“|”)和一个两个空格(“ ”),然后在最后的一列不上i行“|”,从而实现布局图的输出。display函数源代码如下:

void display(int ** &m,int row,int col)

{

3 for(int i=0;i<row;i++) { if(i!=0){cout<<"|"<<endl;} //输出最后一列的竖线

抽签游戏 抽签游戏

} { } //判断布局数组,为1输出竖线横杠,为0输出竖线空格 for(int j=0;j<col-1;j++) cout<<"|"<<""; if(m[i][j]==1){cout<<"一";}else{cout<<" ";}

cout<<"|"<<endl; //输出最后一行最后一列的竖线

}

2)castlot(int ** &m,int * &b,int row,int col ); //抽签函数

castlot函数是用来实现抽签而设计的算法,它的原理是通过调换中间数组各元素的次序,来实现抽签人和签号的不同对应的,每当检测到m[i][j]的值为1时即存在横杠时,则交换中间数组b[j]和b[j+1]的值,最终得到的b[col]数组可以传入link函数,从而实现抽签人和签号之间的一一对应。(www.61k.com]函数源代码如下:

void castlot(int ** &m,int * &b,int row,int col)

{

int q,s,i;

for(q=0;q<row;q++) //从上到下遍历二维数组

//因为该抽签函数原形来源于鬼脚图,鬼脚图没一行中不存在相邻的横线,所以可以直接跳过该行的下一列

} s+=2; }else s++; //从左到右遍历二维数组 while(s<col-1) { { temp=b[s]; b[s]=b[s+1]; int temp; if(m[q][s]==1) { s=0; //判断有横杠时横杠两端元素交换数据 b[s+1]=temp;

3)link(string * &a,string * &p,int * &b,int row,int col ); //连接函数,将抽签人和签号连接起来

4

抽签游戏 抽签游戏

link()方法的功能就是通过传进来的中间数组将存放抽签人的字符串数组a[col]和存放签号的字符串数组p[col]一一对应起来,从而确定抽签结果,并且打印出来。(www.61k.com]

4)rand( )和srand(); //为二维数组随即赋0、1值的函数

rand函数和srand()函数随机给二维数组赋0、1值,但是需要声明srand( (unsigned)time( NULL ) ),这样每次随机出来的数才会不一样,如果没有那条语句也可以随机赋值给二维数组,但是每次运行程序赋的值都一样,所以程序里应包含time.h头文件,从而可以使每次运行程序都有一个不同的布局二维数组。其相关代码如下:

//使每次运行程序都会有不同的二维数组产生,且申明在for循环前减少等待时间

} } //随机给布局二维数组赋0、1值,并且每行不能有相邻的1 if(j>0) { } } if(m[i][j-1]==1&&m[i][j]==1){m[i][j]=0;} srand( (unsigned)time( NULL ) ); if(r==2){for(i=0;i<row;i++){ { for(j=0;j<col-1;j++) m[i][j]=rand()%2;

四、 调试与测试

1.随机产生布局二维数组时出现相邻横线的情况,加上一段代码后问题解决。只要判断相邻的两个数是否都是1,如果是则把后者变成0。相关代码如下:

if(j>0)

{

m[i][j]=0;

}

} 调试程序截图如下: { if(m[i][j-1]==1&&m[i][j]==1)

五、 关键源程序清单和执行结果

1、源程序:

#include<iostream>

#include<string>

#include<time.h>

5

抽签游戏 抽签游戏

using namespace std;

void display(int ** &m,int row,int col); //打印布局函数声明 void castlot(int ** &m,int * &b,int row,int col); //抽签函数声明

//最后用中间结果将签号和抽签人连接起来的函数声明

void link(string * &a,string * &p,int * &b,int row,int col); void main()

{

//中间结果数组初始化 { b[t]=t;

6 cout<<"为抽签做准备,搭建抽签布局,先输入抽签共经过的层数和参加的人数:"<<endl; int **m; //存储抽签布局的动态二维数组数组 string *a; //存储抽签人编号的一维数组 string *p; //存储签号的一维数组 int *b; //存放中间结果的动态一维数组 int i,j,t; //循环用变量 int row,col; //布局数组的行列相关项 cin>>row>>col; //申请动态一维数组 b=new int[col]; a=new string[col]; p=new string[col]; //输入抽签人编号 cout<<"请输入抽签人编号:"<<endl; { } //输入签号 cout<<"请输入签号:"<<endl; for(t=0;t<col;t++) { } for(t=0;t<col;t++) cin>>a[t]; cin>>p[t]; for(t=0;t<col;t++)

抽签游戏 抽签游戏

} //动态二维数组的申请 m=new int *[row]; { } for(i=0;i<row;i++) m[i]=new int[col-1]; cout<<"请输入抽签布局数组各行、列的值:"<<endl;

//循环输入存放抽签布局的二维数组的值

int r;

{

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

{

cout<<"请输入第"<<i+1<<"层的布局(由0和1组成的"<<col-1<<"个数,数与数之间用空格隔开):"<<endl;

for(j=0;j<col-1;j++)

{

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

{

for(j=0;j<col-1;j++)

{

7 cout<<"请选择手动输入或者自动生成布局数组(输入1或2)"<<endl; cout<<" 1.手动输入 "<<endl; cout<<" 2.随机生成 "<<endl; cin>>r; if(r==1) } } { } cin>>m[i][j]; //使每次运行程序都会有不同的二维数组产生,且申明在for循环前减少等待时间 srand( (unsigned)time( NULL ) ); if(r==2) m[i][j]=rand()%2;

抽签游戏 抽签游戏

}

// 用来输出布局图的函数

void display(int ** &m,int row,int col)

{

{

cout<<"|"<<endl;

} //输出最后一列的竖线

{

cout<<"一";

}else

{

cout<<" ";

}

}

cout<<"|"<<endl; //输出最后一行最后一列的竖线

8 } } //随机给布局二维数组赋0、1值,并且每行不能有相邻的1 if(j>0) { } } if(m[i][j-1]==1&&m[i][j]==1){m[i][j]=0;} display(m,row,col); castlot(m,b,row,col); link(a,p,b,row,col); cout<<"*******************************************"<<endl; cout<<"根据随机生成的布局数组产生的抽签布局图如下:"<<endl; for(int i=0;i<row;i++) { if(i!=0) { //判断布局数组,为1输出竖线横杠,为0输出竖线空格 for(int j=0;j<col-1;j++) cout<<"|"<<""; if(m[i][j]==1) }

抽签游戏 抽签游戏

}

//抽签函数

void castlot(int ** &m,int * &b,int row,int col) {

cout<<"******************************************"<<endl; cout<<"下面是没经过一层输出的中间结果的顺序:"<<endl; int q,s,i;

for(q=0;q<row;q++) //从上到下遍历二维数组

}

}

9 { s=0; } //打印中间结果 cout<<"经过第"<<q+1<<"层以后中间结果对应的顺序"<<endl; for(i=0;i<col;i++) { } cout<<endl; cout<<b[i]<<" "; //从左到右遍历二维数组 while(s<col-1) { { temp=b[s]; b[s]=b[s+1]; int temp; if(m[q][s]==1) //判断有横杠时横杠两端元素交换数据 b[s+1]=temp; //因为该抽签函数原形来源于鬼脚图,鬼脚图没一行中不存在相邻的横线,所以可以直s+=2; 接跳过该行的下一列 }else s++;

抽签游戏 抽签游戏

//连接函数,通过中间数组b连接抽签人数组和签号数组

void link(string * &a,string * &p,int * &b,int row,int col)

{

cout<<"*********************************************************"<<endl; cout<<"最后的签号与抽签人的对应结果如下"<<endl;

int x,y;

srand( (unsigned)time( NULL ) );

y=rand()%col;

for(x=0;x<col;x++)

{

}

cout<<"随机产生的奖品的签号为"<<p[y]<<endl;

cout<<"所以恭喜"<<a[b[y]]<<"获得本次抽签大将!!!"<<end; cout<<p[x]<<" 对应于 "<<a[b[x]]<<endl;

}

六、 课设感想

通过这次课设,我真的学到了很多东西,从二维数组的传参、释放、申请赋值到随机生成0、1序列,过程中遇到很多问题,我要么请教同学老师,或者上网查资料,最终问题都一一解决了。[www.61k.com)当看到题目的时候我以为我这个题目非常难,甚至有点畏惧的感觉,但是一步步做下来,一切都没有想象中那么难,我们不能被表面吓到了,只要有一颗执着的心,没有什么问题是解决不了的。终于在今天我的课设全部做完了,感觉很激动。看着自己的程序,一种成就感油然而生。希望在以后的日子里,我可以带着这种激情,这种信念,继续走下去,学下去。

七、参考文献

1.王红梅.数据结构.清华大学出版社

2.王红梅.数据结构学习辅导与实验指导.清华大学出版社

3.严蔚敏,吴伟民.数据结构(C语言版).清华大学出版社

10

本文标题:抽签游戏-抽条游戏
本文地址: http://www.61k.com/1164801.html

61阅读| 精彩专题| 最新文章| 热门文章| 苏ICP备13036349号-1