CCF-20160902-火车购票(100分)
2017-10-22 12:35
387 查看
package CCF; import java.util.Scanner; /** 问题描述 请实现一个铁路购票系统的简单座位分配算法,来处理一节车厢的座位分配。 假设一节车厢有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。 * @author Vivinia * * 2017年10月22日 */ public class trainBuyTicket { static int[][] tickets,seats; static int n; public static void main(String[] args) { int i,j; Scanner input=new Scanner(System.in); n=input.nextInt(); tickets=new int [6]; //车票数组,每行第一个是车票数,第=从第二个开始是这些车票的位置 seats=new int[20][5]; //座位数组,用于标志位置知否被选,选中为1,未选为0 for(i=0;i<n;i++) tickets[i][0]=input.nextInt(); //输入车票数 input.close(); for(i=0;i<n;i++) { check(i,tickets[i][0]); //依次遍历每次的买票数 } for(i=0;i<n;i++) { for(j=1;j<6;j++) { if(tickets[i][j]!=0) System.out.print(tickets[i][j]+" "); } System.out.println(); } } private static void check(int ticketNum,int t) { int i,j,seatNum=0,k=1,flag=0; //flag标志位,标志是否选到合适的位子 for(i=0;i<20;i++) { for(j=0;j<5;j++) { //这里查找i行第j个位置开始往后是否有满足t个位置的空位,当然如果每行只有5个位置 if(seats[i][j]==0) { seatNum++; if(seatNum==t)//第i个位置开始空位个数 break; //有可能座位很多,所以找到自己需要的那几个就跳出循环 } } if(seatNum==t) { for(j-=(seatNum-1);k-1<seatNum;j++) { seats[i][j]=1; tickets[ticketNum][k++]=i*5+j+1; } flag=1; break; } seatNum=0; if(flag==1) break; } if(i==20&&flag==0) //找了一圈没有连续的连续空位了,需要进行不连续插空 elseCheck(ticketNum,t); } private static void elseCheck(int ticketNum,int t) { int flag=0; int i,j,seatNum=0; for(i=0;i<20;i++) { for(j=0;j<5;j++) { if(seats[i][j]==0) { seatNum++; seats[i][j]=1; tickets[ticketNum][seatNum]=i*5+j+1; if(seatNum==t) { flag=1; break; } } } if(flag==1) break; } } }
相关文章推荐
- CCF—火车购票 20160902
- CCF CSP 201609-2 火车购票(Java-100分)
- CCF20160902火车购票
- 201612-2 试题名称:火车购票(100分)ccf 认证
- CCF火车购票(C语言)
- 【CCFCSP】201609-2 火车购票
- CCF 201609-2 火车购票
- CCF——火车购票
- ccf 201609-2火车购票
- CCF 201612-2 火车购票
- CCF 201609-2 火车购票
- ccf-火车购票
- CCF CSP 201609-2 火车购票 java
- CCF认证-20160902-火车购票
- CCF-CSP 火车购票
- CCF CSP 编程题目和解答-----试题名称:火车购票-------201609-2
- ccf 火车购票
- ccf竞赛之火车购票 java版
- CCF编程练习:火车购票(Java)
- CCF 火车购票 C++ 解题,java写