解题思路:我感觉这题真的太绕了,代码都尽量注释了,不知道大家能不能看懂/捂脸
注意事项:
参考代码:
#include<stdio.h>
#define N 50
int num[N];//人标记,非0:游戏中 0:淘汰
int max;//人数
int last()
{
int out=0;//出局人数累计
int con=1;//条件累加器
int list=1;//遍历数组num
int k;
for( k=1;k<=max;k++)//标记所有人
{
num[k]=k; //标记游戏中
}
while(out<max-1)//大循环
{
if(num[list]!=0) //已经出局的不算 不计数,直接跳过
{
if(con==3 )//数到3
{
out++; //淘汰数+1 控制总循环 总共需要淘汰max-1个人
num[list]=0; //淘汰的人值0
con=0; //数数值0,然后+1 从1开始重新计数
}
con++;//数数 +1
}
list++;//原始排序遍历
if(list>=max+1)//list==max是最大值
list=1;//重新开始从1开始
}
int i=1;
for(i=1;i<=max; )//找到非0 既是winer
{
if(num[i]!=0)
break;
i++;
}
return i;
}
int main(){
int k;
scanf("%d",&max);
k=last();
printf("%d",k);
return 0;
}
0.0分
0 人评分