C++解蓝桥杯真题:有n个人围城一个圈,按顺序排好号,然后从第一个开始报数,报到3退出圈子,继续从1到3报数,直到剩下最后一个人,求最后留下的是几号

之前我们用scratch解答过这道题,关于解题思路,大家可以去看下《scratch解蓝桥杯真题:有n个人围城一个圈,按顺序排好号,然后从第一个开始报数,报到3退出圈子,继续从1到3报数,直到剩下最后一个人,求最后留下的是几号》这篇文章。

接下来我们用C++来解答下这道真题。题目如下:

有n个人围城一个圈,按顺序排好号,然后从第一个开始报数(从1到3报数),报到3的人退出圈子,然后继续从1到3报数,直到最后留下一个人游戏结束,问最后留下的是原来的第几号?

解题思路:

j按1,2,3循环报数 报到3 就把数组的值替换为0 并把 k加1 即 0的个数加1

当i数组的当前下标位置直到 n 的时候 就从0开始 i=0

最后取出数组中不为0的数字即可

源码如下:

#include<iostream>
using namespace std;
int main()
{
	int i=0; //当前位置 
	int j=0; //1-3循环报数  遇到3就从新开始报数 
	int k=0; //记录 0 元素的个数
	int n;
	cout<<"请输入人数"<<endl;
	cin>>n; 
	int arr[n];
	for(int s=0;s<n;s++)
	{
		arr[s]=s+1;
	}
	while(k<n-1)
	{
		if(arr[i]!=0)
		{
			j++;  //不为0就报数  
		}
		if(j==3) 
		{
			j=0;
			arr[i]=0;
			k++;
		}
		i++;
		if(i==n)
		{
			i=0;
		}
	}
	for(int s=0; s<n;s++)
	{
		if(arr[s]!=0)
		{
			cout<<"最后一个人的原编号为:"<<arr[s]<<endl;
			break;
		}
	}
   return 0;
}

最后更新时间:

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌抄袭侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。

上一篇 2022-10-08 12:15:53
下一篇 2022-10-10 10:00:00

相关推荐