PTA题集——基础——7-28 猴子选大王 (20 分)

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

11

输出样例:

7

思路:依旧采用数组的方式,使用1 2 3三个数字对N循环编号,如果是3就将其变为0,每次从第一个非0开始,记为1,进行重新编号,以此类推,当只剩下一个不为0时,即为所求结果,代码如下:

#include <stdio.h>
#include <math.h>

int main() {
    int n;
    int s[1001]={0};
    int i;
    scanf("%d", &n);
    for (i=0;i<n;i++){
    	s[i]=i+1;
	}
	int count=n;
	int j=1;
	while (count != 1){
		for (i=0;i<n;i++){
			if (s[i] != 0){
				s[i] = j;
				j++;
				if (j==4){
					j=1;
				}
				if (s[i]==3){
					s[i]=0;
					count--;
				}
			}
		}
	}
	for (i=0;i<n;i++){
		if (s[i]!=0){
			printf("%d", i+1);
		}
	}
    
    return 0;
}


发布了33 篇原创文章 · 获赞 6 · 访问量 1万+

猜你喜欢

转载自blog.csdn.net/sinat_38354769/article/details/102738442