n個數字形成一個圓圈,隔m個數字刪除一個的問題
阿新 • • 發佈:2019-02-10
n個數字(0,1,2,3.。。n)形成一個圓圈,從數字0開始,每次從這個圓圈中刪除第m個數字(第一個為數字本身,第二個為當前的下一個數字)當一個數字刪除後,
從被刪除的下一個繼續刪除第m個數字。
求剩下的最後一個數字。
#include <iostream> #include <list> //n個連續數字形成一個圓圈,從0開始,每次從這個圓圈中刪除第m個數字,當一個數字刪除後,從下一個繼續刪除第m個數字,求最後剩下的數字是多少(第一個為當前數字本身,第二個為下一個) using namespace std; int findlastnum(unsigned int n,unsigned int m) { if(n<1||m<1) return -1; unsigned int i=0; list<int> intarrs; for(i = 0; i < n; i++) { intarrs.push_back(i); } list<int>::iterator curr=intarrs.begin(); while(intarrs.size() > 1) { for(i = 1; i < m ; i++) { curr++; if(curr==intarrs.end()) curr=intarrs.begin(); } list<int>::iterator next=curr; next++; if(next == intarrs.end()) next = intarrs.begin(); intarrs.erase(curr); curr = next; } return *curr; } int main() { int num = findlastnum(4,3); cout<< num <<endl; return 0; }