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