想看更多的解题报告: http://iyenn.com/rec/1824570.html
转载请注明出处:http://blog.csdn.net/wangjian8006
题目大意:有n个城市围成圈,先将第一个城市断电,然后每隔m个城市使一个城市断电,这样使2号城市最后断电的最小的m是什么
然后给你n,输出m
解题思路:约瑟夫环问题,直接模拟,用约瑟夫公式可以算出
- /*
- Memory 164K
- Time 32MS
- */
-
- #include
- 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;
- }
评论记录:
回复评论: