用C++容器模板解决——约瑟夫问题
以下是《C++语言程序设计》的学习笔记,仅供参考:#include <iostream>#include <vector>#include <iterator>#include<typeinfo>#include<list>#include<deque>using namespace std;// n个骑...
·
以下是《C++语言程序设计》的学习笔记,仅供参考:
#include <iostream>
#include <vector>
#include <iterator>
#include<typeinfo>
#include<list>
#include<deque>
using namespace std;
// n个骑士, 报到 m 的骑士出列
template<class T>
void joseph(T collection, int n, int m){
if(n < 1 || m < 1){
cout<<"there is an error!"<<endl;
return;
}
// 插入n个数
for(int i = 1; i <= n; i++){
collection.push_back(i);
}
// 数数, 删除数到 m 的骑士,连续数 n-1 次
class T::iterator iter = collection.begin();
int count = 1;
while(collection.size() > 1){
while(count % m == 0 && collection.size() > 1){
count = 1;
if( typeid(collection) != typeid(list<int>) ){
// vector 和 deque 属于非结点类容器,这里的 erase 返回的是下一个元素
iter = collection.erase(iter);
}else{
// list 属于结点类容器,这里的 erase 返回的是当前元素
collection.erase(iter++);
}
if(iter == collection.end()){
iter = collection.begin();
}
}
count++;
iter++;
if(iter == collection.end()){
iter = collection.begin();
}
}
// 输出最后剩下的那个骑士
cout<<"the last one is "<<*iter<<endl;
}
int main(){
vector<int> v;
deque<int> deq;
list<int> l;
joseph(v, 10, 7);
joseph(deq, 10, 7);
joseph(l, 10, 7);
return 0;
}
魔乐社区(Modelers.cn) 是一个中立、公益的人工智能社区,提供人工智能工具、模型、数据的托管、展示与应用协同服务,为人工智能开发及爱好者搭建开放的学习交流平台。社区通过理事会方式运作,由全产业链共同建设、共同运营、共同享有,推动国产AI生态繁荣发展。
更多推荐



所有评论(0)