思路:
定义一维数组, 数组下标表示人的编号, 值表示是否出局(1为出局), 先将数组元素全部初始化为0, 然后定义两个整型变量 num 表示人的编号和 count 其所报的数(i 在0~2循环, 0即表示报数为3,则出局),再定义一个整型变量left记录剩余人数, 剩余1人时退出循环。此人为胜者并输出其编号。
code:
#include <stdio.h>
int main(){
int a[10000] = {0};
int sum; //总人数
int num, count, left;
scanf("%d", &sum);
left = sum;
for(num=0,count=1; ; num=(num+1)%sum){
if(a[num] == 1) //若此人出局则继续找下一位未出局的人
continue;
if(count==0){ //若此人报数为 0 则此人出局
a[num] = 1;
left--;
if(left == 1)
break;
}
count=(count+1)%3;
}
for(num=0; num < sum; num++) //在数组中找到唯一未出局的人
if(a[num]==0)break;
printf("%d", num+1);
return 0;
}
初学小白, 若有可改进之处欢迎评论