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();
                }
            }
        }       
    }
}

猜你喜欢

转载自www.cnblogs.com/yu-jiawei/p/12366242.html