ccf 火车购票 java实现

package ccf;

import java.util.Scanner;

public class my201609_2 {
	public static void main(String[] args) {
		Scanner input=new Scanner(System.in);
		int n=input.nextInt();
		int []data=new int[n];	//购票指令,要几张票
		int [][]result=new int[n][];
		for (int i = 0; i < data.length; i++) {
			data[i]=input.nextInt();
			result[i]=new int [data[i]];
		}
		int []seat=new int[100];	//100个座位
		for(int i=0;i<100;i++) {	//初始时每个都是空座位
			seat[i]=0;
		}
		for (int i = 0; i < n; i++) {	//遍历每条购票指令
			if(data[i]==1) {	//如果只要一张,编号最小的空位给他
				for(int j=0;j<100;j++) {	//遍历找到空座位
					if(seat[j]==0) {
						result[i][0]=j+1;
						seat[j]=1;
						break;
					}
				}
			}
			else {	//如果要2-5张
				int end=-1;	//从几号开始
				for(int j=0;j<20;j++) {	//遍历每一排
					int sum=0;	//某一排连续的空座位最多几个
					for (int j2 = 0; j2 < 5; j2++) {
						if(seat[j*5+j2]==0) {
							sum++;
							if(sum==data[i]) {
								end=j2;
								break;
							}
						}
						else {
							sum=0;
						}
					}
					if(sum==data[i]) {//可以给他连续的座位
						for (int k = 0; k < data[i]; k++) {
							result[i][data[i]-k-1]=j*5-k+end+1;
							seat[j*5-k+end]=1;
						}
						break;
					}
					else {//这一排不能给他连续 那就下一排
						if(j<19)continue;
						else {
							for(int m=0;m<data[i];m++) {//遍历每个人
								for(int j1=0;j1<100;j1++) {	//遍历找到空座位
									if(seat[j1]==0) {
										result[i][m]=j1+1;
										seat[j1]=1;
										break;
									}
								}
							}
						}
					}
				}
				
			}
		}
		for(int i=0;i<n;i++) {
			for(int j=0;j<data[i];j++) {
				System.out.print(result[i][j]+" ");
			}
			System.out.println();
		}
		
	}
}

最近在备考12月份ccf考试,将做出来的题发到博客,欢迎大家与我探讨,留言看到后会及时回复大家。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值