CCF_Java_201609-2_の最大変動


制限時間:1.0秒
メモリ制限は:256.0メガバイト

問題の説明

  • 座席割当区画に対処する単純なシートレール発券システム割り当てアルゴリズムを実装します。
  • キャリッジ20行を仮定し、それぞれ5席。便宜のために、我々はすべての座席を与えるために1-100番号を使用して、最初の行が番号51である、第二行は番号106であるので、最初の行20は、100から96です。
  • 予約時に、人がいない以上5以下の一枚の以上のチケット、アップを購入することができます。この多くのチケットが同じ行番号隣接シートに配置することができる場合、それは隣接座席の最小数であるべきです。そうでない場合は(隣接するか否かに関係なく)いくつかの空席に最小数に配置されるべきです。
  • 初期のチケット購入がすべてではないと仮定すると、今、あなたはこれらの指示に対処する、いくつかの命令のチケットを与えます。

入力形式

  • 入力整数nの最初の行は、命令のチケットの数を含みます。
  • 第二行は、隣接する2つの数値の間の空間分離を使用して、購入する投票数を示し、nは整数、1と5の間の各整数pを含んでいます。

出力フォーマット

  • N出力線、命令の処理結果に対応する各ライン。
  • 昇順でチケット命令P、P出力チケット番号について。

サンプル入力

4
2 5 4 2

サンプル出力

1 2
6 7 8 9 10
11 12 13 14
3 4

サンプル説明

  1. 2枚の購入チケットは、1,2シートを得ました。
  2. 5枚のチケットを購入、10にシート6を得ました。
  3. 4枚の購入チケットは、14にシート11を得ました。
  4. 2枚の購入チケットは、3,4シートを得ました。

評価尺度の例とで合意

  • 評価のためのすべてのユースケース、1≤N≤100、すべてのチケットの数とを超えない100。

コード

import java.util.Scanner;

public class Main {
	
	static boolean[][] seat=new boolean[20][5];
	
	public static void main(String[] args) {
		int n,num;
		
		Scanner sc=new Scanner(System.in);
		
		n=sc.nextInt();
		for(int i=0;i<n;i++) {
			num=sc.nextInt();
			get(num);//出票
			System.out.println();
		}
		sc.close();		
	}
		
	static void get(int num) {
		int temp=0;
		for(int i=0;i<20;i++) {
			for(int j=0;j<5;j++) {
				if(!seat[i][j]){
					temp++;
				}else {
					temp=0;//有一个间断的就重新开始计算
				}				
				if(temp==num) {
					for(int k=j+1-num;k<=j;k++) {
						seat[i][k]=true;//标记出票
						System.out.print(5*i+k+1+" ");//输出结果
					}
					return;
				}
			}
			temp=0;//一排没有满足条件的也清零
		}//如果有连续的座位则直接出连续的票数,并且直接结束方法
		
		for(int i=0;i<20;i++) {
			for(int j=0;j<5;j++) {
				if(!seat[i][j]) {
					seat[i][j]=true;//对出票的座位做标记
					System.out.print(5*i+j+1+" ");
				}
			}
		}//没有连续的票坐则使用单独的票,并且按照大小出票		
	}
}
公開された47元の記事 ウォンの賞賛2 ビュー2219

おすすめ

転載: blog.csdn.net/weixin_43662429/article/details/104829024