试题编号: | 201609-2 |
试题名称: | 火车购票 |
时间限制: | 1.0s |
内存限制: | 256.0MB |
问题描述: | 问题描述 请实现一个铁路购票系统的简单座位分配算法,来处理一节车厢的座位分配。 输入格式 输入的第一行包含一个整数n,表示购票指令的数量。 输出格式 输出n行,每行对应一条指令的处理结果。 样例输入 4 样例输出 1 2 样例说明 1) 购2张票,得到座位1、2。 评测用例规模与约定 对于所有评测用例,1 ≤ n ≤ 100,所有购票数量之和不超过100。 |
问题分析:简单模拟,先尝试选择同一排相邻的座位,如果不行就选择散座
程序说明:使用数组a表示座位,a[i]=0表示座位为空,a[i]=1表示座位非空
提交后得100分的C++程序:
#include<iostream>
using namespace std;
const int N=100;
int a[N+1];
int main()
{
int n,p;
cin>>n;
while(n--){
cin>>p;
bool flag=false;//flag=flase表明在同一排连续找p个位置没成功
for(int i=1;i<=20&&(!flag);i++){//共20排
int cnt=0;
for(int j=1;j<=5;j++){
int pos=(i-1)*5+j;//此为数组中的位置
if(!a[pos])//如果这个位置为空
cnt++;
else
cnt=0;
if(cnt==p){
for(int k=pos-p+1;k<=pos;k++){
cout<<k<<" ";
a[k]=1;
}
flag=true;//成功找到
break;
}
}
}
//如果在同一排找连续的座位失败,则找编号小的散座
if(!flag){
int cnt=0;
for(int i=1;i<=N;i++){
if(!a[i]){
cout<<i<<" ";
a[i]=1;
cnt++;
}
if(cnt==p)
break;
}
}
cout<<endl;
}
return 0;
}