ccf 火车购票

import java.util.ArrayList;
import java.util.List;
import java.util.Scanner;

public class Main2 {

	public static void main(String[] args) {
		// TODO Auto-generated method stub
			List<int[]> lt = new ArrayList<int[]>();
			Scanner input = new Scanner(System.in);
			int count = input.nextInt();
			int[] buy = new int[count];
			for(int i =0;i < count;i++){
				buy[i] = input.nextInt();
				
			}
			for(int j = 0;j < 20;j++){
				int[] arr = {j,5};
				lt.add(arr);
			}
			
			for(int i =0;i<count;i++){
				
				for(int j =0; j < lt.size();j++){
					
					if(buy[i] <= lt.get(j)[1]){
						int index = lt.get(j)[0];
						int bianhao = lt.get(j)[1];
						for(int k = 1;k<=buy[i];k++){
						System.out.print(index*5 + 5 - bianhao+k + " ");
						}
						bianhao -= buy[i];
						if(bianhao==0){
							lt.remove(j);
							break;
						}else{
							int[] arr = {index,bianhao};
							lt.set(j, arr);
							break;
						}
					}else if(j == lt.size()-1){
						
						for(int k =0;k < lt.size();k++){
							int index = lt.get(k)[0];
							int bianhao = lt.get(k)[1];
							while(buy[i]!=0&&bianhao!=0){
								buy[i]--;
								System.out.print(index*5 + 5 - bianhao + 1 + " ");
								bianhao--;
							}
							if(bianhao==0&&buy[i] !=0){
								lt.remove(k);
								k--;
								continue;
							}
							if(buy[i] ==0){
								if(bianhao==0){
									lt.remove(k);
									
								}
								break;
							}
							
						}
					}
				}
				
				System.out.println();
			}
			
			
			
	}


}

 这道题的思路我的思路是如何?构建个集合lt存放座位,每次购票的行为的时候,

都会遍历这个集合,如果集合中的某个元素的座位变为0,即是卖完了,则把它从集合中删除掉。这里面有个重点就是当座位不能连在一起买的时候,就需要分开买,

因此需要一个else if来判断是否遍历完了,都还没有买到票,进而进入分散买票。

这个是我的测试结果。

原文地址:https://www.cnblogs.com/ke-T3022/p/7929682.html