201609-2 火车购票 Java

思路待补充

import java.util.Scanner;
 
class Main{
	public static void main(String[] args) {
		//100个座位
		int[] seat = new int[100];
		Scanner sc = new Scanner(System.in);
		//购票指令的数量
		int n = sc.nextInt();
		//存储每次的购票数量
		int[] record = new int[n]; 
		//初始化购票指令
		for(int i = 0;i<n;i++){
			record[i] = sc.nextInt();
		}
		sc.close();
		//开始购票
		for(int i = 0;i<n;i++){
			//将每次购票放在一个变量num中
			int num = record[i];			
			//是否有连续座位
			boolean flag = false;		
			for(int x = 0;x<20;x++){
				for(int y = 0;y<5;y++){			
					//当前这个位置没有被安排
					//且当前行开始+当前需要预定票数要<=5
					if(seat[x*5+y]==0&&y+num<=5){
						for(int z = x*5+y;z<x*5+y+num;z++){
							//第一次购票,就在座位标记1,第二次购票,就在座位标记2
							seat[z] = i+1;
						}
						//有连续座位
						flag = true;
						//跳出第三个for循环
						break;
					}
				}
				//跳出第二个for循环
				if(flag){
					break;
				}
				
			}
			//初始的flag是false,如果经过中间三个for循环,flag就是true,就进不了下面的if
			//查看flag,如果没有连续座位,就是从前到后遍历,每一个座位遇到0,就置数字
			if(!flag){
				while(num-->0){
					for(int w = 0;w<100;w++){
						if(seat[w]==0){
							seat[w] = i+1;
							//置完一次就跳出for循环,给本次购票 下一张票找位置
							break;
						}
					}
				}
			}	
		}
		//开始遍历座位输出
		//定义一个count,记录每一次购票是否达到本次购票数目
		int count = 0;
		for(int i = 0,j = 1;i<100;i++){
			if(seat[i]==j){
				System.out.print(i+1+" ");
				count++;
				//如果count等于本次购票数目,就重新开始遍历,i和count置0;j++,进行下一个购票指令
				if(count==record[j-1]){
					i = 0;
					j++;
					count = 0;
					System.out.println();
				}
			}
		}		
	}
}
原文地址:https://www.cnblogs.com/yu-jiawei/p/12366242.html