引言:CSP(http://www.cspro.org/lead/application/ccf/login.jsp)是由中国计算机学会(CCF)发起的"计算机职业资格认证"考试,针对计算机软件开发、软件测试、信息管理等领域的专业人士进行能力认证。认证对象是从事或将要从事IT领域专业技术与技术管理人员,以及高校招考研究生的复试对象。

  • 问题描述

  请实现一个铁路购票系统的简单座位分配算法,来处理一节车厢的座位分配。

  假设一节车厢有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 <stdio.h>

void adjust(int j, int *monitor, int seat[20][5]);

int main(void)

{

,不能赋其他值

代表已售出,0代表未售出

int monitor[20]; // 每一排还剩下几个连续的空座位

for (int i = 0; i < 20; i++)

{

monitor[i] = 5;

}

int count; // 指令的条数

scanf("%d", &count);

for (int i = 0; i < count; i++)

{

int order;

scanf("%d", &order);

int flag = 1; // 标识是否在同一排中找到相邻的座位

for (int j = 0; j < 20; j++)

{

// 在同一排中找到相邻的座位

if (monitor[j] >= order)

{

flag = 0;

monitor[j] = monitor[j] - order;

int temp_count = 0;

for (int k = 0; k < 5; k++)

{

if (seat[j][k] == 0 && temp_count < order)

{

seat[j][k] = 1;

printf("%d ", j*5+k+1);

temp_count++;

}

}

printf("\n");

break;

}

}

if (flag == 1) // 未能在同一排找到连续相邻的座位

{

int temp_count = 0;

int sign = 0;

for (int j = 0; j < 20; j++)

{

for (int k = 0; k < 5; k++)

{

if (seat[j][k] == 0 && temp_count < order)

{

seat[j][k] = 1;

printf("%d ", j*5+k+1);

temp_count++;

sign = 1;

}

}

if (sign == 1)

{

sign = 0;

adjust(j, monitor, seat);

}

}

printf("\n");

}

}

return 0;

}

// 计算每一排剩余连续席位数

void adjust(int j, int *monitor, int seat[20][5])

{

int sum = 0;

int k = 0;

int max = 0;

for (int i = 0; i < 5; i++)

{

sum = sum + seat[j][i];

if (sum != 0)

{

int temp = i - k;

if (temp > max)

{

max = temp;

}

sum = 0;

k = i+1;

}

}

monitor[j] = max;

}

CSP201609-2:火车购票的更多相关文章

  1. CCF CSP 201609-2 火车购票

    题目链接:http://118.190.20.162/view.page?gpid=T46 问题描述 请实现一个铁路购票系统的简单座位分配算法,来处理一节车厢的座位分配. 假设一节车厢有20排.每一排 ...

  2. CCF201609-2 火车购票 java(100分)

    试题编号: 201609-2 试题名称: 火车购票 时间限制: 1.0s 内存限制: 256.0MB 问题描述: 问题描述 请实现一个铁路购票系统的简单座位分配算法,来处理一节车厢的座位分配. 假设一 ...

  3. CCF 2016-09-2 火车购票

    CCF 2016-09-2 火车购票 题目 问题描述 请实现一个铁路购票系统的简单座位分配算法,来处理一节车厢的座位分配. 假设一节车厢有20排.每一排5个座位.为方便起见,我们用1到100来给所有的 ...

  4. 火车购票问题(16年ccf)

    火车购票问题(16年ccf) 问题描述 请实现一个铁路购票系统的简单座位分配算法,来处理一节车厢的座位分配. 假设一节车厢有20排.每一排5个座位.为方便起见,我们用1到100来给所有的座位编号,第一 ...

  5. 【刷题笔记】火车购票-----java方案

    问题描述请实现一个铁路购票系统的简单座位分配算法,来处理一节车厢的座位分配. 假设一节车厢有20排.每一排5个座位.为方便起见,我们用1到100来给所有的座位编号,第一排是1到5号,第二排是6到10号 ...

  6. CCF 201612-2 火车购票 (暴力)

    问题描述 请实现一个铁路购票系统的简单座位分配算法,来处理一节车厢的座位分配. 假设一节车厢有20排.每一排5个座位.为方便起见,我们用1到100来给所有的座位编号,第一排是1到5号,第二排是6到10 ...

  7. ccf 火车购票

    import java.util.ArrayList; import java.util.List; import java.util.Scanner; public class Main2 { pu ...

  8. CCF2016092火车购票

    问题描述 请实现一个铁路购票系统的简单座位分配算法,来处理一节车厢的座位分配. 假设一节车厢有20排.每一排5个座位.为方便起见,我们用1到100来给所有的座位编号,第一排是1到5号,第二排是6到10 ...

  9. ccf-201609-2 火车购票

    问题描述 请实现一个铁路购票系统的简单座位分配算法,来处理一节车厢的座位分配. 假设一节车厢有20排.每一排5个座位.为方便起见,我们用1到100来给所有的座位编号,第一排是1到5号,第二排是6到10 ...

随机推荐

  1. 使用Fiddler监控来自手机客户端的请求

    环境配置组成: 1 手机 2 安装Fiddler的PC 设置要点: 1 手机和PC应在同一个局域网内 我的做法是:PC安装WIFI热点,手机连接热点上网 PC的IP是192.168.95.1  手机的 ...

  2. PDO介绍(16)

    安装PDO PDO的数据选项 链接到数据库服务器并选择数据库 错误处理 获取和设置属性 查询执行 准备语句介绍 获取数据 设置绑定列 处理事务

  3. misc类设备

    何为misc (1)中文名:杂项设备\杂散设备,它是一种典型的字符设,在一般情况下在内核中,所有的misc设备的主设备号是固定的,为10,它们的次设备号不一样:(2)可以在根文件系统中看到:/sys/ ...

  4. 轻量ORM-SqlRepoEx (十五)最佳实践之数据映射(Map)

    简介:SqlRepoEx是 .Net平台下兼容.NET Standard 2.0人一个轻型的ORM.解决了Lambda转Sql语句这一难题,SqlRepoEx使用的是Lambda表达式,所以,对c#程 ...

  5. 1006.Sign in and Sign out(25)—PAT 甲级

    At the beginning of every day, the first person who signs in the computer room will unlock the door, ...

  6. Mysql-数据的完整性约束

    一 .介绍 二 .not null与default 三 .unique 四 .primary key 五 .auto_increment 六 .foreign key 一 .介绍 约束条件与数据类型的 ...

  7. Linux各个文件及其含义

    树状目录结构: 以下是对这些目录的解释: /bin:bin是Binary的缩写, 这个目录存放着最经常使用的命令. /boot:这里存放的是启动Linux时使用的一些核心文件,包括一些连接文件以及镜像 ...

  8. 最新学习springboot 配置注解

    一.概述      Spring Boot设计目的是用来简化新Spring应用的初始搭建以及开发过程.Spring Boot并不是对Spring功能上的增强,而是提供了一种快速使用Spring的方式. ...

  9. 笔记:HTML5中input元素新增的type值

    在HTML5中,input元素的type值增加了不少,使input的功能强大了很多. 但在各大浏览器中并不是所有的type值都支持. 以下是比较有用.并且浏览器支持的稍好一些的值: type=colo ...

  10. Redis报(error) NOAUTH Authentication required.问题解决

    启动后 输入auth+空格+密码 ok