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

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM