题目:约瑟夫模型。要求最后输出的是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;
}
该博客主要探讨了如何解决UVA在线判题平台上的151号问题——Power Crisis,即约瑟夫环模型。在实现过程中,博主遇到了判断条件错误导致的指针问题,指出在某些编译器中可能会导致程序意外终止。为了解决这个问题,博主给出了修正后的C++代码,并特别强调了避免数组溢出的情况。最终,代码能够正确找出使序列中最后一个数为13的间隔数。
1797

被折叠的 条评论
为什么被折叠?



