201609-2 火车购票
题目
思路
开一个sold[20]数组,记录每一排卖出的座位数,而卖出的票一定是从小号开始,所以具体几号票还在也确定了。
AC代码如下
#include<cstdio>
#include<cstring>
int main(){
int n,p,sold[20];
scanf("%d",&n);
memset(sold,0,sizeof(sold));
while(n--){
scanf("%d",&p);
int i;
for(i=0;i<20;i++){//从第0排开始找有p个座的一排
if(sold[i]<=5-p){
for(int j=1;j<p;j++){//卖出连续p张票
printf("%d ",5*i+j+sold[i]);
}
printf("%d\n",5*i+p+sold[i]);
sold[i]+=p;
break;
}
}
if(i==20){//没有连续的p张票
for(int j=0;j<20&&p>0;j++){
while(sold[j]<5&&p>0){//找到空则卖,卖够p张或该排卖完则停止
printf("%d",j*5+sold[j]+1);
p--;
if(p>0) printf(" ");
else printf("\n");
sold[j]++;
}
}
}
}
return 0;
}