思路: 定义一维数组, 数组下标表示人的编号, 值表示是否出局(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; }初学小白, 若有可改进之处欢迎评论
