(C++)有n个人围成一圈,顺序排号。从第一个人开始报数(1~3报数),凡报到3的人退出圈子,问最后留下的人原来排在第几号。

(C++)有n个人围成一圈,顺序排号。从第一个人开始报数(1~3报数),凡报到3的人退出圈子,问最后留下的人原来排在第几号。

#include<iostream>
#include<iomanip>
using namespace std;

int main() {
	//num[50]:存储参加游戏的总人数
	int i, k, m, n, num[50], * p;
	//输入参加游戏的总人数
	cout << "input n:" <<endl ;
	cin >> n;
	//将数组首元素赋给指针
	p = num;
	//给数组赋值
	for ( i = 0; i < n; i++)
	{
		*(p + i) = 1 + i;
	}
	i = 0;	//用于循环	
	k = 0;	//用来记录报数的数
	m = 0;	//用来记录淘汰的人数
	//如果参加游戏人数没剩下最后一个人就继续报数
	while (m<n-1)
	{
		//报数,每报一次,k加1,数组元素为0的不报数
		if (*(p + i) != 0) k++;
		//如果报数人数达到3,就将记录报数的k清零,并将报数为3的元素值改为0
		if (k==3)
		{
			*(p + i) = 0;//将报数为3的元素值改为0
			k = 0;//将记录报数的k清零
			m++;//用来记录淘汰的人数
		}
		i++;//循环次数
		//判断循环是否结束了一轮
		if (i==n)
		{
			i = 0;//重新将循环次数清零,以便下轮游戏
		}
	}
	//查询最终剩下的是哪个
	while (*p==0)
	{
		p++;
	}
	cout << *p;
	 
	return 0;
}

版权声明:本文为weixin_45487120原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接和本声明。