猴子选大王

发布时间:2024年01月09日

思路:首先举个例子:当N = 5 时? ??

1? ? ? ? ? ? ? ? ? ? ? ? ?2? ? ? ? ? ? ? ? ? ? ? ? ?3? ? ? ? ? ? ? ? ? ? ? ? 4? ? ? ? ? ? ? ? ? ? ? ? 5

? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? 3?

3? ? ? ? ? ? ? ? ? ? ? ? ?

? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?3

? ? ? ? ? ? ? ? ? ? ? ? 3

输出4

? ? ? ? ? 请观看代码? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ??

#include <stdio.h>
int main()
{
?? ?int n = 0;
?? ?int i = 0;
?? ?int count = 0;
?? ?int z = 0;
?? ?char arr[1002] = { '\0'};? arr是每个猴子的编号
?? ?scanf("%d",&n);
?? ?if( n == 1 )
?? ?{
?? ??? ?printf("1\n");
?? ??? ?return 0;
?? ?}
?? ?count = n;
?? ?for( i = 1 ; i <= n ;i++)
?? ?{
?? ??? ?
?? ??? ?arr[i] = '1'; 将每个猴子的编号赋为1? , 当报到的猴子赋为0
?? ?}
?? ?i = 0;
?? ?while( 1 )
?? ?{
?? ?z++;
?? ?i++;
?? ?if( z % 3 == 0 && arr[i] == '1')必须是未被淘汰的猴子
?? ?{
?? ??? ?arr[i] = '0';
?? ??? ?z = 0;
?? ??? ?count--;
?? ??? ?if( count == 1 )
?? ??? ?{
?? ??? ??? ?for( i = 1 ; i <= n ;i++)
?? ??? ??? ?{
?? ??? ??? ??? ?if( arr[i] == '1')
?? ??? ??? ??? ?{
?? ??? ??? ??? ??? ?printf("%d\n",i);
?? ??? ??? ??? ??? ?return 0;
?? ??? ??? ??? ?}
?? ??? ??? ?}
?? ??? ?}
?? ?}
?? ?else if( arr[i] == '0')
?? ?{
?? ??? ?z--;
?? ?}
?? ?if( i == n )
?? ?{
?? ??? ?i = 0;
?? ?}
?? ?}
?? ?return 0;
}

文章来源:https://blog.csdn.net/wx20041102/article/details/135488244
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。