数三出局:有n个学生(给学生用数字编号1----n)围在一起做游戏,从第一个学生开始依次数1,2,3;周而复始,数到3的同学从游戏里面淘汰,请打印最后剩下的学生编号
方案1:给数到3的做标记
#include <stdio.h>
#include <string.h>
void main()
{
int N;
scanf("%d",&N);
char student[N];//N个人,1表示未退出,0表示已经退出
int out[N];//退出的人的号码记录
int count = 0;//循环计数 0,1,2
int num_out = 0;//退出号码记录的数组的下标
memset(student, 1, sizeof(student));//将所有人状态置为1(未退出)
//当num_out=N-1的时候代表退出的数组满了,那就是所有人都退出了,则退出循环
for (int i = 0; i < N && num_out < N ; i = ++i % N)
{
if (1 == student[i] && 2 == count++%3)
{
//未退出的人计数到2的人标记退出,并将号码保存到out数组中
student[i] = 0;
out[num_out++] = i;
}
}
//循环输出退出的号码
for (int i = 0; i < N-1; ++i)
{
printf("淘汰%d号\n", ou