POJ 2244 Eeny Meeny Moo C++版

题目链接:http://poj.org/problem?id=2244

这个题简单约瑟夫问题,跟1012一个意思,不过比1012简单,方法一样,稍微调整一些细节就可以了。

题意是有n个城市,每隔m隔城市限电,1号第一个,问m为多少2号最后限电,我们可以这样看,就是n-1个城市从第一个开始数,保证第一个城市有电!

老样子利用公式:

1
2
3
4
p[i]=(p[i-1]+m-1)%(n-i);



代码如下:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
/***************************************
Problem: 2244 User: awq123
Memory: 248K Time: 16MS
Language: C++ Result: Accepted
***************************************/
#include <iostream>
#include <cstdio>
#include <cstring>
#include <algorithm>
using namespace std;

int main()
{
int n,m,i,p[155];
while(cin>>n&&n;)
{
m=1;
memset(p,0,sizeof(p));
for(i=1;i<=n-2;i++)
{
p[i]=(p[i-1]+m-1)%(n-i);
if(p[i]==0)
{
i=0;
m++;
}
}
cout<<m<<endl;
}
}