欢迎访问我的CCF认证解题目录
题目描述
思路过程
使用栈存储一排剩余的座位号,如果可以坐在一排,那么在这个栈弹出对应的座位数,如果不能坐一排,则从第一排开始遍历弹出座位号。
代码
import java.util.ArrayList;
import java.util.List;
import java.util.Scanner;
import java.util.Stack;
public class Main {
public static void main(String[] args) {
Scanner in = new Scanner(System.in);
int n = in.nextInt();
List<Stack<Integer>> list = new ArrayList<Stack<Integer>>();
//20排座位
for ( int i = 0; i < 20; i++ ) {
list.add(new Stack<Integer>());
//填入编号,小号在栈的最上面
for ( int j = 5; j > 0; j-- ) {
list.get(list.size()-1).add(i*5+j);
}
}
for (int i = 0; i < n; i++) {
int temp = in.nextInt();
boolean flag = false;//标记是否已经选好座位
for ( Stack<Integer> s: list ) {
//如果可以坐在一排
if ( s.size() >= temp ) {
flag = true;
for ( int j = 0; j < temp; j++ ) {
System.out.print(s.pop()+" ");
}
break;
}
}
//如果不能能坐在一排
if ( !flag ) {
for ( Stack<Integer> s: list ) {
while ( s.size() > 0 && temp > 0 ) {
System.out.print(s.pop()+" ");
temp--;
}
}
}
System.out.println();
}
}
}