第六次课上作业
第六次课上作业
题目要求:
(要求用指针处理)有 n 人围成一个圈,顺序排号, 从第一个人开始报数(从1到3报数),凡报到3的人退出圈子,问 最后留下的是原来第几号的那位
思路:找方法记录下每个成员的序号,从第一个开始依次计数,使被去除的成员不再计数而序号不受影响
#include<stdio.h>
int main()
{
int n,flag=0,j=0,m,i=0;
scanf("%d",&n);
int arr[1000];
m=n;//用m记录最大人数
for(int j=0;j<n;j++)
{
arr[j]=j+1;//用数组给每个人编号
}
while(n>1)
{
if(arr[i]!=0)//用arr[i]=0来辨别是否已经退出作为判断条件
flag++;
if(flag==3)
{
arr[i]=0;
n--;//总人数减一个
flag=0;
}
i++;
if(i==m)//i==m时候全部遍历一遍了,重头开始再计数。
{
i=0;
}
}
for(int j=0;j<m;j++)
{
if(arr[j]!=0)
printf("%d",arr[j]);
}
return 0;
}