CCF_Java_201609-2_ fluctuación máxima


Plazo: 1,0 s
Límite de memoria: 256.0MB

Descripción del problema

  • Implementar un simple algoritmo de asignación de sistema de boletos carril de asiento para hacer frente a un compartimiento de asignación de asientos.
  • Supongamos que un carro 20 filas, cada una de cinco asientos. Por conveniencia, se utiliza el número 1-100 para dar a todos los asientos, la primera fila es el número 51, la segunda fila es el número 106, y así, la primera fila 20 es de 96 a 100.
  • Cuando la reserva, una persona puede comprar una o más entradas, hasta no más de cinco. Si esta cantidad de entradas pueden ser dispuestos en los mismos números de fila asiento adyacente, que debería estar en el menor número de asientos adyacentes. De lo contrario, debe estar dispuesto en el número más pequeño de unos pocos asientos vacíos (sin tener en cuenta si el vecino).
  • Suponiendo que la compra del billete inicial no es todo, ahora dan algunas entradas de instrucción, a lidiar con estas instrucciones.

Formato de entrada

  • Consta de una primera línea de entrada de número entero n, el número de billetes de instrucciones.
  • La segunda línea contiene n enteros, cada número entero p entre 1 y 5, que muestran el número de votos para comprar, con una separación espacial entre dos números adyacentes.

Formato de salida

  • N líneas de salida, cada línea correspondiente al resultado del procesamiento de una instrucción.
  • Para p instrucción de entradas, la salida p un número de ticket, en orden ascendente.

entrada de la muestra

4
2 5 4 2

Ejemplo de salida

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

Descripción de la muestra

  1. 2 entradas de compra, para dar 1,2 asiento.
  2. 5 tickets de compra, para dar el asiento 6 a 10.
  3. 4 entradas de compra, para dar el asiento 11 a 14.
  4. 2 entradas de compra, para dar 3,4 asiento.

casos escala de evaluación y de acuerdo con

  • Para la evaluación todos los casos de uso, 1 ≤ n ≤ 100, todo número de entradas y no más de 100.

código

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+" ");
				}
			}
		}//没有连续的票坐则使用单独的票,并且按照大小出票		
	}
}
Publicado 47 artículos originales · ganado elogios 2 · Vistas 2219

Supongo que te gusta

Origin blog.csdn.net/weixin_43662429/article/details/104829024
Recomendado
Clasificación