第18題:
題目:n個數字(0,1,…,n-1)形成一個圓圈,從數字0開始,
每次從這個圓圈中刪除第m個數字(第一個爲當前數字本身,第二個爲當前數字的下一個數字)。
當一個數字刪除後,從被刪除數字的下一個繼續刪除第m個數字。
求出在這個圓圈中剩下的最後一個數字。
/*
Name:
Copyright:
Author:
Date: 15-06-11 14:10
Description:題目:n個數字(0,1,…,n-1)形成一個圓圈,從數字0開始,
每次從這個圓圈中刪除第m個數字(第一個爲當前數字本身,第二個爲當前數字的下
一個數字)。
當一個數字刪除後,從被刪除數字的下一個繼續刪除第m個數字。
求出在這個圓圈中剩下的最後一個數字。
*/
#include<iostream>
#include<iomanip>
using namespace std;
int main()
{
int n;
cout<<"n=";
cin>>n;
if(n<0)
return -1;
int *a=new int[n];
int *ret=new int[n];
cout<<"m=";
int m;
cin>>m;
if(m<=0)
return -1;
for(int i=0;i<n;i++){
a[i]=i;
}
int s = m-1;
const int itval = s;
s = s%n;
for(int i = 0; i<n ; i++){
s = s%(n - i);
ret[i] = a[s];
for(int j = s; j < n-i-1; j++){
a[j] = a[j + 1];
}
s = s + itval;
}
cout<<ret[n -1]<<endl;
system("pause");
return 0;
}