题目地址:点击打开链接
C++代码:
#include <iomanip>
#include <iostream>
#include <vector>
#include <algorithm>
using namespace std;
int main()
{
int n,k,m;
while(1)
{
cin>>n>>k>>m;
if(n==0&&m==0&&k==0)
break;
vector<int> vi;
int i;
for(i=0;i<n;++i)
vi.push_back(i+1);
vector<vector<int> > vit;
int size=n;
int start_k=0;
int start_m=n-1;
int end_k,end_m;
while(size>0)
{
end_k=(start_k+k-1)%size;
end_m=(start_m-m%size+size+1)%size;
vector<int> a;
a.push_back(vi[end_k]);
a.push_back(vi[end_m]);
vit.push_back(a);
int num=a[0]==a[1]?1:2;
vector<int>::iterator itr1,itr2;
itr1=vi.begin()+end_k;
vi.erase(itr1);
if(end_k!=end_m)
{
if(end_k<end_m)
itr2=vi.begin()+end_m-1;
else
itr2=vi.begin()+end_m;
vi.erase(itr2);
}
if(end_m<end_k)
{
if(end_m==0)
start_m=size-num-1;
else
start_m=end_m-1;
if(end_k==size-1)
start_k=0;
else
start_k=end_k+1-num;
}
else
{
if(end_k+1==end_m||end_k==end_m)
{
start_k=end_k;
if(end_k==0)
start_m=vi.size()-1;
else start_m=start_k-1;
}
else
{
start_m=end_m-2;
start_k=end_k;
}
}
size=vi.size();
}
size=vit.size();
for(i=0;i<size;++i)
{
if(vit[i][0]!=vit[i][1])
cout<<setw(3)<<vit[i][0]<<setw(3)<<vit[i][1];
else
cout<<setw(3)<<vit[i][0];
if(i!=size-1)
cout<<",";
}
cout<<endl;
}
return 0;
}原文:http://blog.csdn.net/leizh007/article/details/19823087