7-28 猴子选大王 (20 分)

题目链接

一群猴子要选新猴王。新猴王的选择方法是:让N只候选猴子围成一圈,从某位置起顺序编号为1~N号。从第1号开始报数,每轮从1报到3,凡报到3的猴子即退出圈子,接着又从紧邻的下一只猴子开始同样的报数。如此不断循环,最后剩下的一只猴子就选为猴王。请问是原来第几号猴子当选猴王?

输入格式:

输入在一行中给一个正整数N(≤1000)。

输出格式:

在一行中输出当选猴王的编号。

输入样例:

11

输出样例:

7

 

 1 #include<algorithm>
 2 #include<iostream>
 3 #include<cstring>
 4 #include<cstdio>
 5 #include<vector>
 6 #include<cmath>
 7 using namespace std;
 8 int main(){
 9     int n,num;
10     vector <int> vec;
11     scanf("%d",&n);
12     for(int i = 1;i <= n;i++){
13         vec.push_back(i);
14     }
15     num = 0;
16     while(vec.size() != 1){
17         for(int i = 0;i < vec.size();i++){
18             num++;
19             if(num == 3){
20                 vec.erase(vec.begin() + i);
21                 if(vec.begin() + i != vec.end())//如何删除的不是最后一个num = 1,否则为0
22                     num = 1;
23                 else
24                     num = 0;
25             }
26         }
27     }
28     printf("%d\n",vec[0]);
29     return 0;
30 }
View Code

 

posted @ 2018-12-03 19:46  永不&言弃  阅读(1586)  评论(0编辑  收藏  举报