n个元素围成一圈,每次删除第m个元素,求最后一个被删除的元素。
#include <iostream.h>
#include "list"
using namespace std;
//使用list而非vector
int findLast(int m,int n){
if(m<=0||n<=0){
return -1;
}
list<int> v;
for(int i=0;i<n;i++){
v.push_back(i);
}
list<int>::iterator cur=v.begin();
while(v.size()>1){
for(int i=1;i<m;i++){
cur++;
if(cur==v.end()){
cur=v.begin();
}
}
//此时,cur在第m-1和m个元素之间
list<int>::iterator next=++cur;
if(next==v.end()){
next=v.begin();
}
cur--;
v.erase(cur);
cur=next;
}
return *cur;
}
int main(int argc, char *argv[])
{
cout<<findLast(1,10)<<endl;
return 0;
}
时间: 2024-10-10 12:46:14