问题描述
请实现一个铁路购票系统的简单座位分配算法,来处理一节车厢的座位分配。
假设一节车厢有20排、每一排5个座位。为方便起见,我们用1到100来给所有的座位编号,第一排是1到5号,第二排是6到10号,依次类推,第20排是96到100号。
购票时,一个人可能购一张或多张票,最多不超过5张。如果这几张票可以安排在同一排编号相邻的座位,则应该安排在编号最小的相邻座位。否则应该安排在编号最小的几个空座位中(不考虑是否相邻)。
假设初始时车票全部未被购买,现在给了一些购票指令,请你处理这些指令,输出购票结果。
例如:若一次购买2,5,4,2张票得到的购票结果为:
1) 购2张票,得到座位1、2。
2) 购5张票,得到座位6至10。
3) 购4张票,得到座位11至14。
4) 购2张票,得到座位3、4。
输入说明
输入由两行构成。
第一行包含一个整数n,表示购票指令的数量,1 ≤ n ≤ 100。
第二行包含n个整数,每个整数p在1到5之间,表示要购入的票数,相邻的两个整数之间使用一个空格分隔,所有购票数量之和不超过100。
#include<stdio.h>
int main()
{
int i,j,n,p;
int s; //购票指令数
int b[100]={0}; //票数
int yu[20]={0};//剩余座位数
scanf("%d",&s);
for(i=0;i<s;i++)
{
scanf("%d",&b[i]);
}
for(i=0;i<20;i++)
{
yu[i]=5;
}
for(n=0;n<s;n++)
{
for(i=0;i<20;i++)
{
if(b[n]<=yu[i])
{
for(p=0;p<b[n];p++)
{
printf("%d ",i*5+6-yu[i]);//打印卖出的车票号
yu[i]--;//计算这一排剩下的票数
}
break;
}
}
if(i>=20)
{
p=0;j=0;
while(j<b[n])
{
if(yu[p]!=0)
{
printf("%d ",p*5+6-yu[p]);
yu[p]--;
j++;
}
else
{
p++;
}
}
}
printf("\n");
}
return 0;
}
欢迎访问我的个人博客Levitate Gu