题目地址:点击打开链接
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