课程设计源代码
来源:互联网 发布:淘宝密码忘了 编辑:程序博客网 时间:2024/04/20 11:33
/******************************************************版权所有(C++)2015,杜佳丽文件名称:约瑟夫.c作者:杜佳丽完成日期:20141225*******************************************************/#include<iostream>#include<cstdlib>using namespace std;class Node//双向循环链表的结点类{ friend class Doublelist; friend void DoubleJoseph();public: Node(); int data; Node *prior; Node *next;private:};class Doublelist//双向循环链表类{ friend void DoubleJoseph();public: void Creatlist(Doublelist &L);//建立双向循环链表 int getLength(Doublelist &L);//获得链表长度 Doublelist();private: Node *Head;};Node::Node()//Node类的构造函数,初始化首结点数据{ data=0; prior=NULL; next=NULL;}Doublelist::Doublelist()//Doublelist类的构造函数,初始化首结点数据{ Head=NULL;}void Doublelist::Creatlist(Doublelist &L)//建立双向循环链表{ cout<<"请输入双向生死游戏的总人数N:"<<'\t'; int n; cin>>n; Node *p,*s; for(int i=1;i<=n;i++) { p=new Node; p->data=i; p->next= NULL; if(i==1) { L.Head=p; p->prior=NULL; s=L.Head; } else { s->next=p; p->prior=s; s=s->next; } } s->next=L.Head; L.Head->prior=p;}int Doublelist::getLength(Doublelist &L)//获取双向链表的长度{ Node *p=L.Head; int count=0; while(p->next!=L.Head) { count++; p=p->next; } count++; return count;}void DoubleJoseph()//实现约瑟夫双向生死游戏{ Doublelist L; L.Creatlist(L); cout<<"请输入游戏开始的位置S:"<<'\t'; int s; cin>>s; cout<<"请输入正向的死亡数字M:"<<'\t'; int m; cin >> m; cout<<"请输入逆向的死亡数字W:"<<'\t'; int w; cin>>w; cout<<"请输入剩余的生者人数K:"<<'\t'; int k; cin>>k; cout<<endl; Node *p,*q,*r; p=L.Head; for(int i=0;i<s-1;i++) { p=p->next; } int t=1; while(k<L.getLength(L)) { if(t%2)//选择游戏方式 { //报数,寻找m结点 for(int j=0;j<m-1;j++) { q=p; p=p->next; } //元素出列 if(p==L.Head) { r=p; L.Head=p->next; q->next=p->next; p->next->prior=q; p=p->next; } else { r=p; q->next=p->next; p->next->prior=q; p=p->next; } cout<<"第" <<t<<"个死者的位置是:"<<r->data<<'\n'; t++; } else { for(int j=0;j<w - 1;j++) //报数,选择w结点 { q=p; p=p->prior; } //元素出列 if(p==L.Head) { r=p; L.Head=p->prior; q->prior=p->prior; p->prior->next=q;/******************************************************版权所有(C++)2015,杜佳丽文件名称:约瑟夫.c作者:杜佳丽完成日期:20141225*******************************************************/#include<iostream>#include<cstdlib>using namespace std;class Node//双向循环链表的结点类{ friend class Doublelist; friend void DoubleJoseph();public: Node(); int data; Node *prior; Node *next;private:};class Doublelist//双向循环链表类{ friend void DoubleJoseph();public: void Creatlist(Doublelist &L);//建立双向循环链表 int getLength(Doublelist &L);//获得链表长度 Doublelist();private: Node *Head;};Node::Node()//Node类的构造函数,初始化首结点数据{ data=0; prior=NULL; next=NULL;}Doublelist::Doublelist()//Doublelist类的构造函数,初始化首结点数据{ Head=NULL;}void Doublelist::Creatlist(Doublelist &L)//建立双向循环链表{ cout<<"请输入双向生死游戏的总人数N:"<<'\t'; int n; cin>>n; Node *p,*s; for(int i=1;i<=n;i++) { p=new Node; p->data=i; p->next= NULL; if(i==1) { L.Head=p; p->prior=NULL; s=L.Head; } else { s->next=p; p->prior=s; s=s->next; } } s->next=L.Head; L.Head->prior=p;}int Doublelist::getLength(Doublelist &L)//获取双向链表的长度{ Node *p=L.Head; int count=0; while(p->next!=L.Head) { count++; p=p->next; } count++; return count;}void DoubleJoseph()//实现约瑟夫双向生死游戏{ Doublelist L; L.Creatlist(L); cout<<"请输入游戏开始的位置S:"<<'\t'; int s; cin>>s; cout<<"请输入正向的死亡数字M:"<<'\t'; int m; cin >> m; cout<<"请输入逆向的死亡数字W:"<<'\t'; int w; cin>>w; cout<<"请输入剩余的生者人数:"<<'\t'; int k; cin>>k; cout<<endl; Node *p,*q,*r; p=L.Head; for(int i=0;i<s-1;i++) { p=p->next; } int t=1; while(k<L.getLength(L)) { if(t%2)//选择游戏方式 { //报数,寻找m结点 for(int j=0;j<m-1;j++) { q=p; p=p->next; } //元素出列 if(p==L.Head) { r=p; L.Head=p->next; q->next=p->next; p->next->prior=q; p=p->next; } else { r=p; q->next=p->next; p->next->prior=q; p=p->next; } cout<<"第" <<t<<"个死者的位置是:"<<r->data<<'\n'; t++; } else { for(int j=0;j<w - 1;j++) //报数,选择w结点 { q=p; p=p->prior; } //元素出列 if(p==L.Head) { r=p; L.Head=p->prior; q->prior=p->prior; p->prior->next=q; p=p->prior; } else { r=p; q->prior=p->prior; p->prior->next=q; p=p->prior; } cout<<"第"<<t<<"个死者的位置是:"<<r->data<<endl; t++; } } cout <<'\n'<< "最后剩下:"<<'\t'<<L.getLength(L)<<"人"<<endl; cout <<"剩余的生者位置为:"<<'\t'; p=L.Head; while(p->next!=L.Head) { cout<<p->data<<'\t'; p=p->next; } if(p) cout<<p->data<<'\t'; cout<<'\n';}int main()//主函数,调用DoubleJoseph()函数{ cout<<"现有N人围成一圈,从第S个人开始依次报数,正向报M的人出局,再由下一人开始报数,"; cout<<"逆时针数到的第W人出局。再从他逆时针的下一个人数起,顺时针数M人。"; cout<<"如此循环,直到剩下K个乘客为止。"<< '\n' << '\n'; DoubleJoseph(); system("pause"); return 0;} p=p->prior; } else { r=p; q->prior=p->prior; p->prior->next=q; p=p->prior; } cout<<"第"<<t<<"个死者的位置是:"<<r->data<<endl; t++; } } cout <<'\n'<< "最后剩下:"<<'\t'<<L.getLength(L)<<"人"<<endl; cout <<"剩余的生者位置为:"<<'\t'; p=L.Head; while(p->next!=L.Head) { cout<<p->data<<'\t'; p=p->next; } if(p) cout<<p->data<<'\t'; cout<<'\n';}int main()//主函数,调用DoubleJoseph()函数{ cout<<"现有N人围成一圈,从第S个人开始依次报数,正向报M的人出局,再由下一人开始报数,"; cout<<"逆时针数到的第W人出局。再从他逆时针的下一个人数起,顺时针数M人。"; cout<<"如此循环,直到剩下K个乘客为止。"<< '\n' << '\n'; DoubleJoseph(); system("pause"); return 0;}
运行结果:
0 0
- 课程设计源代码
- 课程设计源代码
- 课程设计 通讯录源代码
- 数据结构课程设计源代码
- 数据结构课程设计学生成绩管理系统源代码
- C++ 课程设计学生成绩管理系统源代码
- 数据结构课程设计——源代码
- 王爽-汇编语言 课程设计1 汇编源代码
- 课程设计
- 课程设计
- 课程设计
- 课程设计
- 课程设计
- 课程设计
- 课程设计
- 课程设计
- 课程设计
- 课程设计
- python 内建模块
- ios快速创建一个app框架
- 爬虫之Scrapy
- Java算法---整数与IP地址间的转换
- office2007安装找不到Office.zh-cn/OfficeLR.cab问题
- 课程设计源代码
- android Log图文详解(Log.v,Log.d,Log.i,Log.w,Log.e)
- 33.使用UIGraphicsGetCurrentContext()重绘图像
- 2014年,年终总结-“转折”
- hdjglhsadjhgsjaklghs
- Js-Html 前端系列--checkbox
- IOS 基础动画Core Animation
- cf #308 D. Vanya and Triangles (几何)
- Kindeditor的使用