CCF—火车购票 20160902

#include <iostream>
using namespace std;
/******************************************************
注:
flag=true执行后都是先执行第一个for循环,知道20排全部判断并输出完毕
再flag=false,执行第二个for循环
即:
第二个for循环是在20排都判断输出完毕后,没有相邻的座位号时执行
******************************************************/
int main() {
int num,p;//P代表输入每一次的购买票数 
bool flag;//未初始化 默认为1 
int ticket[21];//标记每一排的人数 
for(int i=0;i<20;i++)ticket[i]=5;  
cin>>num; 
 
for(int i=0;i<num;i++){
//处理第i条命令 
cin>>p;
flag=true;  //初始化的值都是未购买,所以是真 
for(int j=0;j<20;j++){
if(ticket[j]>=p){//有满足相邻的最小排 
for(int k=(6-ticket[j]);k<(6-ticket[j])+p;k++){//**循环的参数重要** 
cout<<k+j*5<<" ";
}
ticket[j]=ticket[j]-p;
flag=false;
cout<<endl;
break; 


//如果不存在一个这样行:对输入的P有一个顺序的输出  
/*
n=102
P=4 4 4 4 (100个) 2 2 这个if就是针对最后两个2的情况 
*/ 
if(flag){
for(int j=0;j<20;j++){
for(int k=(6-ticket[j]);k<6;k++){//**循环的参数重要** 
    cout<<k+j*5<<" ";
}
p=p-ticket[j];
ticket[j]=0;
if(p==0)break;
}
cout<<endl;


}
}
/*
4
2 5 4 2
*/ 
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值