硬币游戏
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
《数据结构》
姓名:
专业班级:
学号:
指导教师:
成绩:
2010 年 12 月 22 日
目录
目录 (1)
1. 硬币游戏表示及其运算的实现 (2)
1.1 需求说明 (2)
1.2功能描述 (2)
1.3 系统设计 (2)
1.4 程序运行与结果 (2)
2.总结与分析 (4)
3附录(代码) (4)
附录1 一元多项式的表示及其运算程序源代码 (4)
1.硬币游戏表示及其运算的实现
1.1 需求说明
在游戏开始之前,在桌上将三个硬币放置成一条直线。游戏开始的时候,中间一个硬币是背面朝上,其他两个硬币是正面朝上。游戏目标是改变硬币的摆放形式,让中间一个硬币正面朝上,其他两个硬币背面朝上。具体规则如下:
(1)任何时候都能翻转中间的硬币(从正面翻成背面或相反)
(2)当另外两个硬币都是正面或都是背面的时候能够翻转一端的硬币(从正面翻成背面或相反);
不能通过任何其他方式翻转硬币,如平移它们。但是,只要满足这些规则,你就能够翻转硬币
1.2功能描述
在不违反游戏规则的前提下,能将三枚硬币按照客户的意愿从一种状态转换成另一种状态,中间的每一步在运行结果中显示;如果状态不可转化,则在运行结果中说明。
1.3 系统设计
使用无向图,图中每个顶点代表三个硬币的一种状态(8种状态对应8个顶点,一个状态可用一个字符串表示,如”+ - +”表示了一个中间一个硬币是背面朝上,其他两个硬币是正面朝上的状态);当使用其中一条规则能在两个状态之间来回移动时,就通过一个边连接无向图的两个顶点。
三枚硬币的八种状态类似与三位二进制数排列一样,可以先求出它的邻接矩阵,每种硬币的状态可用0、1、-1表示,0代表本身状态,1代表可以转化为下一状态,-1代表不能转化。应用指针指向每种状态,若初始状态可以转化为目标状态,转化过程在结果中输出。
1.4 程序运行与结果
2.总结与分析
这次实训我做的是一个简单的翻硬币游戏,按照要求该程序只需按照规则改变硬币的状态。本来能够在次基础上更加细化程序,使其有更多的功能。但由于能力有限,再加上其他科目考试等原因,没能实现。通过这次实训,我也认识到了自己的一些缺陷,没能清楚的理解TC3.0和VS6.0这两种编译工具不同。要写好程序,还需对编译工具有更深一部的了解。
3附录
附录1 硬币游戏的表示及其运算程序源代码
#include
#include
#include
#include
char A[8][8]={
{ 0, 1, 1,-1, 1,-1,-1,-1},
{-1, 0,-1, 1,-1,-1,-1,-1},
{ 1,-1, 0, 1,-1,-1, 1,-1},
{-1, 1,-1, 0,-1,-1,-1,-1},
{-1,-1,-1,-1, 0,-1, 1,-1},
{-1, 1,-1,-1, 1, 0,-1, 1},
{-1,-1,-1,-1, 1,-1, 0,-1},
{-1,-1,-1, 1,-1, 1, 1, 0}};
char visited[8]={0,0,0,0,0,0,0,0};
char path[8]={-1,-1,-1,-1,-1,-1,-1,-1};
int len=0;
char transform(char str[])
{
if(strcmp("---",str)==0) return 0;
if(strcmp("--+",str)==0) return 1;
if(strcmp("-+-",str)==0) return 2;
if(strcmp("-++",str)==0) return 3;
if(strcmp("+--",str)==0) return 4;
if(strcmp("+-+",str)==0) return 5;
if(strcmp("++-",str)==0) return 6;
if(strcmp("+++",str)==0) return 7;
return -1;
}
void print(char state)
{
switch(state)
{ //case -1:printf("ERROR");break;
case 0:printf("---");break;
case 1:printf("--+");break;
case 2:printf("-+-");break;
case 3:printf("-++");break;
case 4:printf("+--");break;
case 5:printf("+-+");break;
case 6:printf("++-");break;
case 7:printf("+++");break;
}
}
void search(char state)
{
int i;
visited[state]=1;
path[len++]=state;
if(state==transform("+++"))//目标状态{
for(i=0;i { print(path[i]); printf("\n"); } printf("Mission\n\n"); visited[state]=0;path[--len]=-1; return; } for(i=0;i<8;++i) { if(A[state][i]>0&&visited[i]==0) { search(i); }