解题思路:
1.依次遍历每一个座位,从找到第一个没人买的位置开始,寻找连续的p个座位
2.如果中途有位置已经被人买了,或者到了边界,那么重新寻找,直到找到连续的p个位置
3.如果没有连续位置,从头寻找p个空位置
#include<iostream>
using namespace std;
int main()
{
int n;
cin>>n;
int seat[105]; //标记位置是否被订
for(int i=1;i<=100;i++)
{
seat[i]=1; //初始时位置都没人订
}
while(n--)
{
int p;
cin>>p;
int num=0; //暂时预定的票的数量
int start=0; //开始的座位号
for(int i=1;i<=100;i++)
{
if(seat[i]==1) //本来没人订
{
num++;
}
if(num==p) //买齐所需要的票
{
start=i-p+1; //退回去找开始的座位号
break;
}
if(seat[i]==0||i%5==0) //位置有人或者到了边界
{
num=0; //重新寻找
}
}
if(start==0) //没有连续位置
{
int tt=0;
for(int i=1;i<=100;i++)
{
if(seat[i]==1)
{
tt++;
seat[i]=0;
cout<<i<<' ';
}
if(tt==p) //找齐所有位置
{
break;
}
}
cout<<endl;
}
if(start!=0) //连续的情况
{
for(int i=start;i<p+start;i++)
{
cout<<i<<' ';
seat[i]=0;
}
cout<<endl;
}
}
return 0;
}