求助站外题(SD夏令营)
  • 板块题目总版
  • 楼主Maysoul
  • 当前回复13
  • 已保存回复13
  • 发布时间2022/7/17 09:27
  • 上次更新2023/10/27 19:56:16
查看原帖
求助站外题(SD夏令营)
409774
Maysoul楼主2022/7/17 09:27

SD夏令营第一天题单B题:

某部队进行新兵队列训练,将新兵从一开始按顺序依次编号,并排成一行横队,训练的规则如下:从头开始一至二报数,凡报到二的出列,剩下的向小序号方向靠拢,再从头开始进行一至三报数,凡报到三的出列,剩下的向小序号方向靠拢,继续从头开始进行一至二报数。。。,以后从头开始轮流进行一至二报数、一至三报数直到剩下的人数不超过三人为止。

求调:

#include<iostream>
#include<cstdio>
//#define int long long
#define ll long long
#define next nxt;
#define re register
#define il inline

using namespace std;

il int read()
{
	int f=0,s=0;
	char ch=getchar();
	for(;!isdigit(ch);ch=getchar()) f |= (ch=='-');
	for(; isdigit(ch);ch=getchar()) s = (s<<1) + (s<<3) + (ch^48);
	return f ? -s : s;
}
struct men{
	int num;
	bool chu=0;
};
int main()
{
	int m;
	m=read();
	for (int j=1;j<=m;j++)
	{
		men a[5000];
		int b,n,num=0;
		int line=2;
		n=read();
		b=n;
		for (int i=1;i<=n;i++)
		{
			a[i].num=i;
		}
		for(int i=1;i<=n;i++)
		{
			if(a[i].chu==0)
			{
				num++;
				if(num==line)
				{
					a[i].chu=1;
				//	cout<<a[i].num<<" ";
					b--;
					num=0;
				}
			}
			if(i==n)
			{
				if(line==2)
				{
					line=3;
				}
				else
				{
					line=2;
				}
				i=0;
				num=0;
				//cout<<endl;
				if(b<=3)
				{
					break;
				}
			}
		}
		for (int i=1;i<=n;i++)
		{
			if(a[i].chu==0)
			{
				cout<<a[i].num<<" ";
			}
		}
		cout<<endl;
	}
	return 0;
}
2022/7/17 09:27
加载中...