约瑟夫环
来源:互联网 发布:阿里云上海机房在哪里 编辑:程序博客网 时间:2024/05/20 06:55
约瑟夫环
很老的问题了
这是问题描述
设有编号为1,2,…,n的n(n>0)个人围成一个圈,每个人持有一个密码m。从第一个人开始报数,报到m时停止报数,报m的人出圈,再从他的下一个人起重新报数,报到m时停止报数,报m的出圈,……,如此下去,直到所有人全部出圈为止。当任意给定n和m后,设计算法求n个人出圈的次序。
基本要求
建立模型,确定存储结构。
对任意n个人,密码为m,实现约瑟夫环问题。
出圈的顺序可以依次输出,也可以用一个数组存储。
呃 大致就是这样了
这是代码
#include<iostream>using namespace std;
struct mod{ mod* next; int num;};//结构体的定义,数据结构,个人感觉就是为了处理问题方便来设置的物理上的实体,就是把抽象的问题用具体的模型来代替.在这里就是一个链条,一个接一个连着,好像是一群人手拉手,num代表着这个人的姓名,next就代表着彼此间拉着的手。void handinhand(int n,mod*p){ for(int i=0;i<n;i++) { p[i].next=&p[i+1]; } p[n-1].next=&p[0];}mod *baoshu(int m,mod*b){ int i=0,num=1; mod*odd=b; mod*now=b->next; while(num!=m) { num++; odd=now; now=now->next; } return odd;}void chuju(mod*ood,int i,int last){ mod*l=ood; cout<<"--------在第"<<i<<"轮游戏中---------\n" <<ood->next->num<<"玩家 出局\n"; ood->next=ood->next->next; for(int i=1;i<last;i++) { cout<<l->num<<" "; l=l->next; } cout<<"活着\n";}int main(){ int n,m,i1,i=1; mod*odd; int last; cout<<"有几个人参加\n"; while(!(cin>>n)||n<=0) { cin.clear(); while(cin.get()!='\n') continue; cout<<" W R O N G \n"<<"请输入一个大于0的整数\n"; } cout<<"密码是\n"; while(!(cin>>m)||m<0) { cin.clear(); while(cin.get()!='\n') continue; cout<<" W R O N G \n"<<"请输入一个大于0的整数\n"; } mod p[n]; last=n; for(i1=1;i1<=n;i1++) p[i1-1].num=i1; handinhand(n,p); odd=p[n-2].next;//初始化 从第一个人开始 while(last>1) { odd=baoshu(m,odd); chuju(odd,i,last); i++; last--; } cout<<"------------------gameover-------------\n";}
大致来说就是蛮简单的
运行了一下
阅读全文
0 0
- 约瑟夫问题、约瑟夫环
- 约瑟夫环
- 约瑟夫环
- 约瑟夫环
- 约瑟夫环
- 约瑟夫环
- 约瑟夫环
- 约瑟夫环
- 约瑟夫环
- 约瑟夫环
- 约瑟夫环
- 约瑟夫环
- 约瑟夫环
- 约瑟夫环
- 约瑟夫环
- 约瑟夫环
- 约瑟夫环
- 约瑟夫环
- go--map
- CSS中强大的EM
- 17.10.7B组总结
- 纯干货,Spring-data-jpa详解,全方位介绍。
- 机器学习大牛链接收藏
- 约瑟夫环
- 制作html5游戏遇到的问题与心得
- Upload failed (403): Invalid or non-existent authentication information.
- (M)Dynamic Programming:213. House Robber II
- 软件工程第二章作业
- 2017--就业分享之IT校招现状和面试经历
- android之酷炫的Activity切换动画,打造更好的用户体验
- haproxy使用详解
- (转)Lock和synchronized比较详解