购 2 张票,得到座位 1、2。 购 5 张票,得到座位 6 至 10。 购 4 张票,得到座位 11 至 14。 购 2 张票,得到座位 3、4。
请实现一个铁路购票系统的简单座位分配算法,来处理一节车厢的座位分配。假设一节车厢有 20 排、
每一排 5 个座位。为方便起见,我们用 1 到 100 来给所有的座位编号,第一排是 1 到 5 号,第二排是 6 到
10 号,依次类推,第 20 排是 96 到 100 号。购票时,一个人可能购一张或多张票,最多不超过 5 张。如果
这几张票可以安排在同一排编号相邻的座位,则应该安排在编号最小的相邻座位。否则应该安排在编号最
小的几个空座位中(不考虑是否相邻)。
1.2【基本要求】
假设初始时车票全部未被购买,现在给了一些购票指令,请你处理这些指令。
输入格式:输入的第一行包含一个整数 n(1 ≤ n ≤ 100),表示购票指令的数量。第二行包含 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
样例说明:
代码如下:package 火车票座位分配; import java.util.Scanner; /** * 请实现一个铁路购票系统的简单座位分配算法,来处理一节车厢的座位分配。 * 假设一节车厢有20排,每一排 5个座位。为方便起见,我们用 1到100来给所有的座位编号, * 第一排是 1到 5号,第二排是 6到10号,依次类推,第 20排是96到100号。 * 购票时,一个人可能购一张或多张票,最多不超过 5张。 * 如果这几张票可以安排在同一排编号相邻的座位,则应该安排在编号最小的相邻座位。 * 否则应该安排在编号最小的几个空座位中(不考虑是否相邻)。 * * @author jingbu * */ public class TicketTest { static int time=0;//定义一个静态变量,用来记录每一排座位的个数的变化 public static void main(String[] args) { Scanner scanner=new Scanner(System.in); //输入购票指令的数量 int a=scanner.nextInt(); //只能购买1-100,不在此范围则报错 if(a<1||a>100) { System.out.println("购票指令的数量出错"); } //购票指令的数量对应的票的张数构成的数组 int[] arr=new int[a]; //初始化该数组 for(int i=0;i<a;i++) { int x=scanner.nextInt(); //票的张数只能为1-5,不在此范围则报错 if(x>5||x<1) { System.out.println("购票张数出错"); } else { arr[i]=x; } } //将车的座位定义为二维数组,没有购票为0,否则为1 int seat[][]=new int[20][5]; //初始化该二维数组 for(int i=0;i<20;i++) { for(int j=0;j<5;j++) { seat[i][j]=0; } } //座位分配算法 int[] temp = new int[20];// 定义一个辅助数组,记录每排已购座位的个数 //购票指令的数量决定最后输出的行数 for(int i=0;i<a;i++) { //最后输出a行 for(int j=0;j<20;j++) { if(arr[i]>5-temp[j]) { continue; } else if(arr[i]<=5-temp[j]) { int s=temp[j]; for(int m=temp[j];m<s+arr[i];m++) { seat[j][m]=1; System.out.print((5*j+m+1)+" "); time++; temp[j]=time; } System.out.println(); /* * for(int y=0;y<5;y++) { if(seat[j][y]==1) { System.out.print((5*j+s+1)+" "); } * } System.out.println(); */ time=0;//将记录次数置0 break; } } } /* * for(int i=0;i<20;i++) { for(int j=0;j<5;j++) { if(seat[i][j]==1) { * System.out.print((5*i+j+1)+" "); } } System.out.println(); } */ } }
此题难点在于输出时同一行的座位为不同行输出,具体详细看座位分配算法部分。
本网页所有视频内容由 imoviebox边看边下-网页视频下载, iurlBox网页地址收藏管理器 下载并得到。
ImovieBox网页视频下载器 下载地址: ImovieBox网页视频下载器-最新版本下载
本文章由: imapbox邮箱云存储,邮箱网盘,ImageBox 图片批量下载器,网页图片批量下载专家,网页图片批量下载器,获取到文章图片,imoviebox网页视频批量下载器,下载视频内容,为您提供.
阅读和此文章类似的: 全球云计算