“约瑟夫问题”实现代码加运行截图(ADT小组)

来源:互联网 发布:免费网店源码 编辑:程序博客网 时间:2024/06/04 19:47
#include<iostream>struct people{int m;people* next;};class game{public:game(int, int);//构造函数void count(int);//计数函数void Delete();//删除函数void judgement();//裁判操作函数private:people *p, *frist = NULL;//头指针,与当前位置指针int lenght = 0;};game::game(int n, int m){frist = new people;frist->m = m + 1;//给头结点赋予标识值frist->next = NULL;people * s, *r;s = frist;r = NULL;for (int i = 0; i < n; i++)//动态内存分配{r = new people;r->m = m;s->next = r;r->next = NULL;s = r;lenght += 1;}r->next = frist;p = frist;}void game::count(int m){for (int i = 0; i < (m - 2);)//这里的位置指针只移动到删除位置的前一位{if (p->m == m + 1)//为了跳过头结点的操作{p = p->next;}else{p = p->next;i++;}}}void game::Delete()//删除{people *s;s = p->next;p->next = s->next;delete s;lenght -= 1;}void game::judgement()//裁判操作{for (; 1 == 1;){count(frist->next->m);//开始计数Delete();//删除if (lenght == 1)//判断是否只剩一个人{break;}}//重新计数using std::cout;using std::endl;cout << "优胜者已经产生" << endl;}int main(){int n, m;using std::cout;using std::endl;cout << "请输入人数n,与密码m" << endl;using std::cin;cin >> n >> m;game s(n, m);s.judgement();system("pause");return 0;}

运行截图(比赛进行中):

运行截图(比赛结束):


0 0
原创粉丝点击