数组-11. 猴子选大王(20)

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

输入格式:

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

输出格式:

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

输入样例:

11

输出样例:

7

 1 #include <iostream>
 2 #include <stdio.h>
 3 #include <math.h>
 4 #include <string.h>
 5 #include <stdlib.h>
 6 
 7 using namespace::std; 
 8 
 9 int main(){
10       int n;
11       scanf("%d",&n);
12       int a[1000]={0};
13       
14       
15       int i=0,j=0,flag=0,count=n;
16       while(flag==0)
17       {
18           
19           if(a[j]==0)//是否存活 
20           {
21             if(i%3==2)//活着,并且被选中 
22             {
23                 a[j]=1;
24                 j=(j+1)%n;
25                 count--;
26                 i++;
27             }
28             else
29             {
30                 i++;
31                 j=(j+1)%n;
32             }
33                 
34           }
35           else
36         {
37           j=(j+1)%n;    
38           }
39           
40           if(count==1)
41           {
42               for(int k=0;k<n;k++)
43               {
44                   if(a[k]==0)
45                   {
46                     printf("%d",k+1);
47                   }
48               }
49               flag=1;
50           }
51       }
52       return 0;
53 }
原文地址:https://www.cnblogs.com/ligen/p/4273063.html