/*
需要模拟被杀的和替换的相对位置,一个在前跟另一个在前是完全不一样的。
*/
#include <iostream>
#include <cstdio>
#include <algorithm>
#include<vector>
using namespace std;
int main()
{
int n,k;
while(scanf("%d%d",&n,&k)!=EOF&&(n||k))
{
vector<int> v;
for(int i=1;i<=n;i++)
v.push_back(i);
int m=(k-1)%n;
while(v.size()!=1)
{
int t=(m-1+k)%(v.size()-1);
t=(t+(t>=m))%v.size();
v[m]=v[t];
v.erase(v.begin()+t);
m=((m>t?m-1:m)+k)%v.size();
}
printf("%d\n",(1-v.front()+n)%n+1);
}
return 0;
}
UVA 130 (约瑟夫问题,删除+替换)
最新推荐文章于 2019-05-01 09:53:07 发布