写在前面:这个方法用到很简单的指针与循环,以方便新手上手该题,并且通过直接模拟的方式理解这一过程。很多同学看懂题目意思而无法实现,不妨看看我的方法。
上代码:
#include<iostream>
using namespace std;
int pop(int a[],int n) //这是一个统计剩余人数的函数
{
int j=0;
for(int i=1;i<=n;i++)
{
if(a[i]!=0)
j++;
}
return j;
}
void out(int a[],int n) //这个函数用来将报了3的人踢出(赋为0)
{
for(int i=1;i<=n;i++)
{
if(a[i]==3)
a[i]=0;
}
}
int main()
{
int n;
cin>>n;
int *p=new int[n];//申请长度为n数组
int a=1; //用来控制该报的数,用变量控制保证连续性
for(int i=1;i<=n;i++)//进行第一轮报数
{
p[i]=a;
a++;
if(a==4)
a=1; //从一到三报数
}
out(p,n);//将报出3的人踢出
while(pop(p,n)!=1) //控制循环终止条件为只剩一人
{
for(int i=1;i<=n;i++)
{
if(p[i]!=0) //忽略为0(出列)的人
{
p[i]=a; //这里的a继承了前一轮的值保证了首尾相接
a++;
if(a==4)
a=1;
}
}
out(p,n); //每轮报数后清算一次报3的人
}
for(int i=1;i<=n;i++)
{
if(p[i]!=0)
cout<<i;
}
return 0;
}
题目并不难,简单变量a的引入很好的解决了围成一圈的问题。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)