猴子选大王
思路:首先举个例子:当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;
}
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。 如若内容造成侵权/违法违规/事实不符,请联系我的编程经验分享网邮箱:veading@qq.com进行投诉反馈,一经查实,立即删除!