欢迎来到天天文库
浏览记录
ID:18882828
大小:74.50 KB
页数:9页
时间:2018-09-26
《数据结构课程设计——纸牌游戏》由会员上传分享,免费在线阅读,更多相关内容在教育资源-天天文库。
1、题目:纸牌游戏目录一、需求分析…………………………………………………3二、概要设计…………………………………………………3三、详细设计…………………………………………………4四、调试分析和测试结果……………………………………7五、总结………………………………………………………8六、参考文献…………………………………………………8七、致谢………………………………………………………8八、附录………………………………………………………9一、需求分析按以下规则进行翻牌:编号为1-52张牌,正面向上,从第2张开始,以2为基数,是2的倍数的牌翻一次,直到最后一张牌;
2、然后,从第3张开始,以3为基数,是3的倍数的牌翻一次,直到最后一张牌;然后…从第4张开始,以4为基数,是4的倍数的牌翻一次,直到最后一张牌;...再依次5的倍数的牌翻一次,6的,7的直到以52为基数的翻过,最后输出正面向上的牌有哪些?用函数obv1、obv2按照题目要求的规则,用for循环来实现.二、概要设计1.当从第二个编号开始的每张牌每次遇到是其倍数时,都会相应的翻一次,这样,每张牌会翻的次数就各不一样,可能很多次,也可能只有一两次,而结果只是要输出在经过各个不同次数的翻牌后,正面向上的牌都有哪几张。比如24,第一次它是2的倍数时要从正面翻到背面,当
3、进行到3时,就又要从背面翻回来,而到4时还要在翻,同理呢,到6.8.12…它都要来回的翻。如果它在多次的翻牌后,正面还向上了,那么它就是要输出的结果之一。2.建立代表52张牌的线性表——调用翻牌算法按照规则翻牌——输出翻牌算法的结果最为主要的翻牌算法的实现:voidobv2(SqListL,intn){for(inti=2;i<=n;i++)for(intj=i;j<=L.length;j++)if(j%i==0){if(L.data[j]==1)L.data[j]=0;elseif(L.data[j]==0)L.data[j]=1;}}以上是通过for
4、循环对是当前基数倍数的牌进行翻牌3、根据算法思想,流程图如下:开始建立一个线性表L,将所有变量赋初值为0,表示牌正面向上i>=2&&i<=52j>=i&&j<=5222,j%i=0翻牌,如果L.data[j]=1,则变为0翻牌,如果L.data[j]=0,则变为1j++输出线性表中正面向上的牌的编号结束三、详细设计1、预处理#include#include#defineSIZE100//线性表存储空间的初始分配量2、数据类型定义定义一个结构体类型SqList,结构体中数组指针elem指示线性表的基地址,leng
5、th指示线性表的当前长度。Listsize指示顺序表当前分配的存储空间大小,一旦因插入元素而空间不足时,可进行再分配。typedefstruct{int*elem;//存储空间基址int*data;intlength;//当前长度intlistsize;//当前分配的存储容量}SqList;3、主要函数功能介绍构造一个空的线性表L用来存储分配:voidInitList_Sq(SqList&L){//构造一个空的线性表L。L.elem=(int*)malloc(SIZE*sizeof(int));if(!L.elem)cout<<"ERROR";//存储分
6、配失败L.data=(int*)malloc(SIZE*sizeof(int));if(!L.data)cout<<"ERROR";//存储分配失败L.length=0;//空表长度为0L.listsize=SIZE;//初始存储容量}//InitList_Sq调用PrintList_Sq函数用来显示线性表中的数据:voidPrintList_Sq(SqListL){//显示线性表中所有数据for(inti=1;i<=L.length;i++){if(L.data[i]==1)cout<7、v1,确保翻牌前每张牌都是正面向上:voidobv1(SqListL){for(inti=1;i<=L.length;i++)L.data[i]=1;}调用函数obv2,按照规则翻牌:voidobv2(SqListL,intn){for(inti=2;i<=n;i++)for(intj=i;j<=L.length;j++)if(j%i==0){if(L.data[j]==1)L.data[j]=0;elseif(L.data[j]==0)L.data[j]=1;}}4、主函数voidmain(){SqListL;intn=52;InitList_Sq(L8、);for(inti=1;i<=n;i++){L.elem[i]=i;L.len
7、v1,确保翻牌前每张牌都是正面向上:voidobv1(SqListL){for(inti=1;i<=L.length;i++)L.data[i]=1;}调用函数obv2,按照规则翻牌:voidobv2(SqListL,intn){for(inti=2;i<=n;i++)for(intj=i;j<=L.length;j++)if(j%i==0){if(L.data[j]==1)L.data[j]=0;elseif(L.data[j]==0)L.data[j]=1;}}4、主函数voidmain(){SqListL;intn=52;InitList_Sq(L
8、);for(inti=1;i<=n;i++){L.elem[i]=i;L.len
此文档下载收益归作者所有