题目描述
有n人围成一圈,顺序排号。从第1个人开始报数(从1到3报数),凡报到3的人退出圈子,问最后留下的是原来的第几号的那位。
输入格式
初始人数n
输出格式
最后一人的初始编号
输入
复制
3
输出
复制
2
思路:建立一个数组来代表n个人的编号,从1~n,其余位置均设置为0,然后定义一个整型变量(赋初值0)用于记数,然后让数组下标从1到n开始循环,当该下标位置处的值不为0时,就说明有人,就让记数器+1,当计数器=3时,将该下标处的值置为0,将计数器也置为0,并且人数-1,当最后只剩一个人时跳出循环,数组中剩余的那个不为0的数就是剩下人的编号。
#include<stdio.h>
int main()
{
int n=0;
scanf("%d",&n);
int m=n;
int peo[100]={0};
int i=0;
for(i=1;i<=n;i++)
peo[i]=i;
int count=0;
while(m!=1){
for(i=1;i<=n;i++){
if(peo[i]!=0){
count++;
}
if(count==3){
peo[i]=0;
count=0;
m--;
}
}
}
for(i=1;i<=n;i++){
if(peo[i]!=0)
printf("%d\n",peo[i]);
}
printf("\n");
return 0;
}