题目描述
有n个人(n<=1000),用1,2,…,n编号,顺序排列,并首尾相连围成一圈。从第一个人开始报数(从1到4),凡报到4的人退出圈子,且后面的人继续报数(同样从1到4报数),问最后留下的是原来第几号的那一位(用指针实现)。
输入
输入正整数n。
输出
输出最终留下的那个人的编号。
样例输入
53
样例输出
7
#include<stdio.h> //1998
#define OUT 4 //OUT代表被报到就要出局的那个数字
int main(){
int i,a[100000],n,left,count;
int *p;
while(scanf("%d", &n)!=EOF){
left=n;
count=1;
for ( i = 1; i <= n; i++) a[i]=1;
i=1;
while(left>1){
if (count==OUT && *(a+i)==1){
*(a+i)=0;
left--;
}
i=i%n+1;
if (*(a+i)==1) count=count%OUT+1;
}
for ( i = 1; i <= n; i++)
if (*(a+i)==1) printf("%d\n",i);
}
return 0;
}