CCF CSP 201609-2 火车购票_201609火车票购票ccf java-程序员宅基地

技术标签: csp  java  ccf  CCF CSP认证  

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

解题的代码如下:

import java.util.Scanner;
/*
 * 火车购票
 */
public class Main {
	public static int[][] s;//存储每节车厢的座位
	public static int[] e;//存储车厢座位每排剩余的座位
	
	public static void main(String[] args) {
		// TODO Auto-generated method stub
		Scanner scanner = new Scanner(System.in);
		s = new int[20][5];//0表示座位为空
		int n = scanner.nextInt();//购买指令的数量,不超过5张
		int[] p = new int[n];//存储每次购买的票数
		for(int i=0;i<n;i++){
			p[i]=scanner.nextInt();
		}
		e = has_empty(s);//求得每排空座位的数量存到数组e中。数组e的下标和数组s的行坐标,即e[i]存的数为s中第i排剩余座位
		for(int i=0;i<n;i++){
			for(int j=0;j<20;j++){
				if(p[i]<=e[j]){	//找到一排空座位数大于等于购买的票数
					buy(p[i], j);
					output();//输出本次购买的结果
					System.out.println();
					e=has_empty(s);//每次购买一次票后就得更新e中存储的没排空座位数
					break;
				}
				if(p[i]>e[j]&&j==19){//20 排座位中每排空座位数都比购买的票数少
					buy_left(p[i]);//将票按顺序分配到从第一排开始的空座位
					output();
					System.out.println();
					e=has_empty(s);
					break;
				}
			}
		}
	}
	
	/*
	 * 20排座位中每排空座位数都比购买的票数少,调用该函数
	 */
	public static void buy_left(int sum){
		//按顺序搜索每个座位,是空座位就分配给购买的票
		for(int i=0;i<20;i++){
			for(int j=0;j<5;j++){
				if(s[i][j]==0&&sum>0){
					s[i][j]=1;
					sum--;
				}
			}
		}
	}
	
	
	/*
	 * 分配座位
	 */
	public static void buy(int x,int y){
		//将s中第y排座位中空座位分配
		for(int i=0;i<5;i++){
			if(s[y][i]==0){
				s[y][i]=1;//1表示该座位已分配
				x--;
			}
			if(x==0){//分配完所有票数,退出
				break;
			}
		}
	}
	
	
	/*
	 * 检索每一排座位数
	 */
	public static int[] has_empty(int[][] s){
		int e[] = new int[20];
		for(int i=0;i<20;i++){
			for(int j=0;j<5;j++){
				if(s[i][j]==0)
					e[i]++;
			}
		}
		return e;
	}
	
	
	/*
	 * 输出每次购买结果
	 */
	public static void output(){
		for(int i=0;i<20;i++){
			for(int j=0;j<5;j++){
				if(s[i][j]==1){
					System.out.print((5*i+j+1)+" ");//将i行j列座位换算成实际中第几个座位,并输出
					s[i][j]=2;//已经输出的座位号标记为2,否则每次购买完票调用该函数,会再次将之前购买好的座位号输出
				}
			}
		}
	}
	
}



版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://blog.csdn.net/xiaodingqq/article/details/78706482

智能推荐

Java常考面试题11 内部类可以引用它的包含类(外部类)的成员吗?有没有什么限制?_内部类可以引用它的包含类(外部类)的成员吗?有没有什么限制-程序员宅基地

文章浏览阅读3.4k次。静态的类或者方法只能访问静态成员!_内部类可以引用它的包含类(外部类)的成员吗?有没有什么限制

spring的annotation注解之@Resource_spring如何使用annotation注册的resource实现类-程序员宅基地

文章浏览阅读889次。@Resource(JSR-250标准注解,推荐使用它来代替Spring专有的@Autowired注解) Spring 不但支持自己定义的@Autowired注解,还支持几个由JSR-250规范定义的注解,它们分别是@Resource、@PostConstruct以及@PreDestroy。 @Resource的作用相当于@Autowired,只不过@A_spring如何使用annotation注册的resource实现类

STM32-H750利用USB虚拟端口(VCP)类进行数据发送的移植记录_h750 usb通讯-程序员宅基地

文章浏览阅读1.6k次。通过STM32CubeMx很容易生成测试代码在左侧Connectivity中选择USART,USB_OTG_FS在Middleware中选择USB_DEVICE,在USB_DEVICE Mode中Class For FS IP下拉框中选择Communication Device Class(Virtural Port Com)如果需要利用Cubemx生成的代码进行移植:1.文件需要 1.Middlewares\ST\STM32_USB_Device_Library..._h750 usb通讯

HTML5新增元素——语义化标签篇_low定义度量的值位于-程序员宅基地

文章浏览阅读261次。figure元素figure是个组合元素,可以带标题figcaption,一个figure只允许放置一个figcaption。<figure><img src="logo.png" alt="图片"><figcaption>标志</figcaption></figure>details元素:dtails提供了一种替代Javascript的、将画面上局部区域进行展开或收缩的方法.<details><summary_low定义度量的值位于

mvc ajax跨域,卓景京干货丨SpringMVC利用@CrossOrigin注解解决ajax跨域-程序员宅基地

文章浏览阅读368次。原标题:卓景京干货丨SpringMVC利用@CrossOrigin注解解决ajax跨域1. 什么是跨域跨域,即跨站HTTP请求(Cross-site HTTP request),指发起请求的资源所在域不同于请求指向资源所在域的HTTP请求。当一个请求url的协议、域名、端口三者之间任意一个与当前页面url不同即为跨域当前页面url被请求页面url是否跨域原因http://www.test.com/...

bwa 软件用法简介-程序员宅基地

文章浏览阅读4.8k次,点赞7次,收藏44次。欢迎关注"生信修炼手册"!bwa 是一款将序列比对到参考基因组上的软件,包含了以下3种算法BWA-backtrackBWA-SWBWA-MEMBWA-backtrack适..._bwa用法

随便推点

keil流水灯c语言程序两个一起亮,Keil单片机点亮一个灯及循环流水灯三种实现方法详解...-程序员宅基地

文章浏览阅读1.2w次,点赞12次,收藏64次。实验名称:keil工程建立,点亮一个led灯实验目的:学会keil软件安装,熟悉keil界面并学习如何新建一个工程实验器材:安装有keil的电脑一台预习内容及原理:Keil C51已集成到一个功能强大的集成开发环境μVision4中,提供对8051内核的各种型号的支持。该开发环境下集成了文件编辑处理、编译链接、项目管理、工具引用和仿真软件模拟器以及Monitor51硬件目标调试器等多种功能.初步了..._c语言怎么实现两个led灯一起闪烁

[luogu 4442] [COCI2017-2018#3] Portal {spfa+bfs}_coci portal-程序员宅基地

文章浏览阅读256次。题目https://www.luogu.org/problem/P4442解题思路一个点可以向四边连边,也可以从最近的那一面墙连向这个点所面对的四面墙。连完边后可以直接跑spfa,因为本题根据题意不会构成菊花图(不会卡spfa)。代码#include<queue>#include<cstdio>#include<cstring>#inclu..._coci portal

华为杯数学建模比赛经验分享_华为杯数模准备-程序员宅基地

华为杯数学建模比赛经验分享。准备比赛,选择合适赛题,参考书籍链接,数学建模代码合集。

PyAlgoTrade 学习笔记(一)_pyalgotrade csv-程序员宅基地

文章浏览阅读2.6k次。PyAlgoTrade的主要目的是帮助人们测试其交易策略。 PyAlgoTrade有六大组件:Strategies策略 Feeds数据源 Brokers经纪商 DataSeries数据序列 Technicals指标计算Optimizer优化Strategies 定义的实现交易逻辑的类:何时买、何时卖,等等Feeds These are data providing ab_pyalgotrade csv

Spark Mllib之线性SVM和逻辑回归_二项逻辑回归sample_libsvm_data.txt-程序员宅基地

文章浏览阅读1.3k次。微信公众号:数据挖掘与分析学习1.Mathematical formulation许多标准机器学习方法可以被公式化为凸优化问题,即找到取决于具有d个条目的变量向量w(在代码中称为权重)的凸函数f的最小化的任务。形式上,我们可以将其写为优化问题,其中目标函数形式如下:这里向量xi∈Rd是训练数据的样本,对于1≤i≤n,yi∈R是它们对应的我们想要预测的标签。如果L(w; x,y)可以..._二项逻辑回归sample_libsvm_data.txt

pandas.get_dummies_pd.get_dummies如果某列有缺失值-程序员宅基地

文章浏览阅读1.3k次。Convert categorical variable into dummy/indicator variables参数data : array-like, Series, or DataFrameprefix : string, list of strings, or dict of strings, default NoneString to append DataFrame column ..._pd.get_dummies如果某列有缺失值

推荐文章

热门文章

相关标签