题目:约瑟夫模型。要求最后输出的是13
注意:判断跳出条件时,用m.size()>2而不是>1,否则会发生指针错误。这种错误在xcode中会直接指出来。在codeblocks中,程序仍然可以运行,但是,会突然中止。
提示“Process terminated with status -1073741676 (0 minute(s), 6 second”。检查时注意可能涉及到的溢出情况
#include <cstdio>
#include <string.h>
#include <cstdlib>
#include <cmath>
#include <ctgmath>
#include <iostream>
#include <vector>
#include <algorithm>
using namespace std;
void pack(vector<int> &m,int a){
for(int i=1; i <= a; i++){
m.push_back(i);
}
}
int main()
{
vector<int> m;
int a;
while(scanf("%d",&a) && a){
int gap = 1;
for(;;gap++){
pack(m, a);
int num = 0;//关键代码
while( m.size()>= 2 ){
m.erase(m.begin()+num);
num = (num+gap-1)%(m.size()) ;
}
if(m[0] == 13) {
m.clear();
break;
}
m.clear();
}
cout<<gap<<endl;
}
return 0;
}