n個數字(0,1,…,n-1)形成一個圓圈,從數字0開始(18)

第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;
}


 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章