第六次课上作业

第六次课上作业

题目要求:

(要求用指针处理)有 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;
}
posted @ 2022-04-29 15:48  孟夏十二  阅读(24)  评论(0编辑  收藏  举报