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来判断是否遍历完了,都还没有买到票,进而进入分散买票。
这个是我的测试结果。