vector实现约瑟夫

来源:互联网 发布:反淘宝联盟2015 编辑:程序博客网 时间:2024/05/29 17:06
/*1.  读入优化 的 初识、约瑟夫实现  vector模拟实现过程: 先将每个元素放入 容器中  push_back();           for遍历将 n-1 个元素 在容器中删除 第t个元素   a.erase(a.begin()+t);         最后容器中的最后一个元素就是活下来的人*/#include<iostream>#include<stdio.h>#include<string>#include<string.h>#include<algorithm>#include<queue>#include<stack>#include<map>#include<cmath>#include<iomanip>using namespace std;typedef int _____I;const int N=1e6+10;const int INF=0x3f3f3f3f;#define ERX(___I,__I,_I) for(_____I ___I = __I;___I <  _I; ___I++)#define ERD(___I,__I,_I) for(_____I ___I = __I;___I <= _I; ___I++)#define RED(___I,__I,_I) for(_____I ___I = __I;___I >= _I; ___I--)/* 定义一个int型 x f  定义一个char型得到一个字符 如果该字符不是数字 则再判断该字符是不是-号 如果是 就让f变-1 得到ch 如果该字符是数字就进行累计 x=x*10+ch-'0';ch=getchar(); 最后 返回总结果值  */int read(){ int x=0,f=1;char ch=getchar(); while(ch<'0'||ch>'9'){if(ch=='-') f=-1;ch=getchar();} while(ch>='0'&&ch<='9'){x=x*10+ch-'0';ch=getchar();} return x*f;}int n,m; //共n个人 每次隔m个人就去除此人 vector<int> a;int main(){ n=read();m=read(); for(int i=1;i<=n;i++)  a.push_back(i); int t=0; cout<<"依次需要删除的点:"<<endl; for(int i=1;i<n;i++){  t=(t+m-1)%a.size();//元素下标是从0开始 因此要减一  cout<<a[t]<<endl;  a.erase(a.begin()+t); } cout<<endl<<endl; for(int i=0;i<a.size();i++) cout<<a[i]<<endl; //最后只剩余一个  return 0;}