想看更多的解题报告: http://blog.csdn.net/wangjian8006/article/details/7870410
转载请注明出处:http://blog.csdn.net/wangjian8006
题目大意:有n个城市围成圈,先将第一个城市断电,然后每隔m个城市使一个城市断电,这样使2号城市最后断电的最小的m是什么
然后给你n,输出m
解题思路:约瑟夫环问题,直接模拟,用约瑟夫公式可以算出
/*
Memory 164K
Time 32MS
*/
#include <iostream>
using namespace std;
#define _MAX_ 150
int ans[_MAX_];
void init(){
int i,j,m;
for(i = 3;i < _MAX_;i++){
m = 1;
while(1){
int tmp = 1;
for(j = 2;j < i;j++){
tmp = (tmp + m)%j;
if(tmp == 0){
tmp = j;
}
}
if(tmp == 1){
ans[i] = m;
break;
}
m++;
}
}
}
int main(){
int n;
init();
while(scanf("%d",&n)){
if(!n) break;
printf("%d\n",ans[n]);
}
return 0;
}