火车购票问题(16年ccf)

问题描述
  请实现一个铁路购票系统的简单座位分配算法,来处理一节车厢的座位分配。
  假设一节车厢有20排、每一排5个座位。为方便起见,我们用1到100来给所有的座位编号,第一排是1到5号,第二排是6到10号,依次类推,第20排是96到100号。
  购票时,一个人可能购一张或多张票,最多不超过5张。如果这几张票可以安排在同一排编号相邻的座位,则应该安排在编号最小的相邻座位。否则应该安排在编号最小的几个空座位中(不考虑是否相邻)。
  假设初始时车票全部未被购买,现在给了一些购票指令,请你处理这些指令。
输入格式
  输入的第一行包含一个整数n,表示购票指令的数量。
  第二行包含n个整数,每个整数p在1到5之间,表示要购入的票数,相邻的两个数之间使用一个空格分隔。
输出格式
  输出n行,每行对应一条指令的处理结果。
  对于购票指令p,输出p张车票的编号,按从小到大排序。
样例输入
4
2 5 4 2
样例输出
1 2
6 7 8 9 10
11 12 13 14
3 4
样例说明
  1) 购2张票,得到座位1、2。
  2) 购5张票,得到座位6至10。
  3) 购4张票,得到座位11至14。
  4) 购2张票,得到座位3、4。
评测用例规模与约定
  对于所有评测用例,1 ≤ n ≤ 100,所有购票数量之和不超过100。
 #include<iostream>
using namespace std;
int arr[][]; void FenPei(int a)
{
int count=,Done = ;
for(int y=;y<=;y++)
{
for(int x=;x<=;x++)
{
if(arr[y][x]==&&count<a) count++;//数一排中连续空座的数目
}
if(count==a)//表示当前排有空座 ,分配空座,并将结果进行打印
{
int x=;
while(arr[y][x]) x++;//定位到空座
//将空座置为1,打印输出座位号
while(count--)
{
arr[y][x]=;
cout<<((y-)*+x);
x++;
if(count!=) cout<<" ";
else cout<<endl;
}
Done = ;
break;
}
count=;//在数下一排前将计数器置0
}
if(Done==){
//遍历完毕没有发现空座
for(int y=;y<=;y++)
{
for(int x=;x<=;x++)
{
if(arr[y][x]==)
{
if(a--)
{
//将空座置为1,打印输出座位号
arr[y][x]=;
cout<<((y-)*+x);
if(a!=) cout<<" ";
else cout<<endl;
}
}
}
}
} }
int main()
{
int n=,GouPiao[];
//初始化座位,置为0
for(int y=;y<=;y++)
{
for(int x=;x<=;x++)
arr[y][x] = ;
} cin>>n;
for(int i=;i<n;i++)
{
cin>>GouPiao[i];
}
for(int i=;i<n;i++)
{
FenPei(GouPiao[i]);
}
return ;
}

啊。更新更新,应该是变懒了,不就是最多分配5个座位么。。。

 #include<iostream>
#include<cstring>
using namespace std;
bool buy[]; void buyTicket(int num)
{
if(num == )
{
for(int i=;i<=;i++)
{
if(buy[i]){
buy[i] = false;
cout<<i<<endl;
return;
}
}
}else if(num == ){
for(int i=;i<=;i++)
{
if(buy[i] && buy[i+] && i%!=){
buy[i] = false;buy[i+] = false;
cout<<i<<" "<<i+<<endl;
return;
}
}
}else if(num == ){
for(int i=;i<=;i++){
if(buy[i]&&buy[i+]&&buy[i+]&&i%!= && i%!=){
buy[i] = false;buy[i+] = false;buy[i+] = false;
cout<<i<<" "<<i+<<" "<<i+<<endl;
return;
}
}
}else if(num==){
for(int i=;i<=;i++){
if(buy[i]&&buy[i+]&&buy[i+]&&buy[i+]&&i%!=&&i%!= && i%!=){
buy[i] = false;buy[i+] = false;buy[i+] = false;buy[i+] = false;
cout<<i<<" "<<i+<<" "<<i+<<" "<<i+<<endl;
return;
}
}
}else if(num==){
for(int i=;i<=;i++){
if(buy[i]&&buy[i+]&&buy[i+]&&buy[i+]&&buy[i+]&&i%!=&&i%!=&&i%!= && i%!=){
buy[i] = false;buy[i+] = false;buy[i+] = false;buy[i+] = false;buy[i+] = false;
cout<<i<<" "<<i+<<" "<<i+<<" "<<i+<<" "<<i+<<endl;
return;
}
}
}
///没有连坐
for(int i=;i<=;i++)
{
if(buy[i]){
buy[i] = false;
cout<<i;
if(--num) cout<<" ";
else{
cout<<endl;return;
}
} }
} int main()
{
int n;
while(cin>>n)
{
memset(buy,true,sizeof(buy));
while(n--){ int num;
cin>>num;
buyTicket(num);
}
} return ;
}

最新文章

  1. Javascript-常用字符串数组操作
  2. Windows Commands and API
  3. iOS相关笔记
  4. win10 mysql 5.7.13 服务无法启动 3534
  5. Apizza可以进行本地调试,也可以进行跨域调试,但是需要chrome插件
  6. 【USACO】DP动态规划小测(一)
  7. JavaWeb---图书馆管理系统
  8. bzoj 3037 贪心
  9. Minesweeper PC/UVa IDs: 110102/10189, Popularity: A,Success rate: high Level: 1
  10. java链接mysql
  11. CloudStack全局配置參数
  12. IOS经典的书籍推荐
  13. Java初认识--Java语言的书写规范及基本的运算符
  14. 转 如何使用JEE6快速开发简单的webservice
  15. Java发邮件基础篇
  16. jQuery-2.DOM---创建节点及节点属性
  17. EF中的预先加载和延迟加载
  18. Python遍历文件个文件夹
  19. paramiko 实现ssh登录和sftp登录
  20. 面试真题-----hashMap原理

热门文章

  1. RabbitMQ的基本概念与原理(一)
  2. Python学习记录2-函数与字符串
  3. Linux目录结构以及一些常见操作
  4. python错误大全
  5. python产生错误:can only concatenate str (not &quot;int&quot;) to str
  6. 中国大学MOOC课程信息爬取与数据存储
  7. mysql 数据库常见的一些基本操作 !详不详细你说了算!
  8. META-INF/MANIFEST.MF介绍
  9. Redis持久化(三)
  10. C# 对象和类型(2) 持续更新