CCF CSP 201609 - 2 기차 티켓 팅 (Java - 100 점)

2750 단어 【CCFCSP 인증]
시험 문제 번호:
201609-2
시험 제목:
기차 티켓 팅
시간 제한:
1.0s
메모리 제한:
256.0MB
질문 설명:
문제 설명
철도 구 매 시스템 의 간단 한 좌석 배분 알고리즘 을 실현 하여 한 칸 의 좌석 분 배 를 처리 하 십시오.
한 칸 에 20 줄, 한 줄 에 5 개의 좌석 이 있다 고 가정 하 세 요.편 의 를 위해 우 리 는 1 부터 100 까지 모든 좌석 번 호 를 주 었 다. 첫 번 째 줄 은 1 부터 5 번, 두 번 째 줄 은 6 부터 10 번 으로 순서대로 유추 하고 20 번 째 줄 은 96 에서 100 번 이다.
표를 살 때 한 사람 이 한 장 또는 여러 장 을 살 수 있 으 며 최대 5 장 을 넘 지 않 는 다.만약 이 몇 장의 표 가 같은 줄 의 번호 가 인접 한 좌석 에 배 치 될 수 있다 면, 번호 가 가장 작은 인접 좌석 에 배치 해 야 한다.그렇지 않 으 면 번호 가 가장 작은 빈 좌석 몇 개 에 배치 해 야 한다.
초기 에 차표 가 모두 구 매 되 지 않 았 다 고 가정 하고 지금 은 구 매 명령 을 내 렸 으 니 이 명령 들 을 처리 해 주 십시오.
입력 형식
입력 한 첫 줄 은 티켓 구 매 명령 의 수량 을 나타 내 는 정수 n 을 포함 합 니 다.
두 번 째 줄 은 n 개의 정 수 를 포함 하고 모든 정수 p 는 1 에서 5 사이 에 구입 할 표 수 를 표시 하 며 인접 한 두 숫자 사이 에 빈 칸 으로 구분 합 니 다.
출력 형식
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 장 을 구 매 하여 좌석 6 ~ 10 을 받 습 니 다.
3) 표 4 장 을 구 매 하여 11 ~ 14 석 을 받 습 니 다.
4) 표 2 장 을 구 매 하여 좌석 3, 4 를 받 습 니 다.
평가 용례 규모 와 약정
모든 평가 용례 에 대해 1 ≤ n ≤ 100, 모든 구 매 수량 의 합 은 100 을 초과 하지 않 습 니 다.
문제 설명: 철도 구 매 시스템 의 간단 한 좌석 배분 알고리즘 을 실현 하여 한 칸 의 좌석 분 배 를 처리 합 니 다.
문제 분석: 이 문 제 는 같은 줄 의 일련 표 가 모두 팔 렸 을 때 같은 줄 표 가 아 닌 판매 처 리 를 고려 하 는 것 을 잊 기 쉽다 는 함정 이 있다.이 장면 을 무시 하면 프로그램 은 90 점 밖 에 얻 을 수 없다.프로그램 은 배열 을 이용 하여 매 줄 에 판 매 된 표 수 를 표시 하 는데 이런 사고방식 은 두 가지 상황 에서 의 판단 조건 을 제시 하기에 편리 하 다.
제출 후 100 점 을 받 은 자바 언어 프로그램 은 다음 과 같 습 니 다. (제출 시 모든 설명 을 제거 합 니 다. 그렇지 않 으 면 컴 파일 오류 가 발생 할 수 있 습 니 다)
import java.util.Scanner;

public class Main {

	public static void main(String[] args) {
		int M = 20;
		int a[] = new int[M];

		int n, p;
		Scanner sc = new Scanner(System.in);
		n = Integer.valueOf(sc.nextLine());

		while (n-- != 0) {
			p = sc.nextInt();
			boolean flag = false;
			//                   
			for (int i = 0; i < 20; i++) {
				if (a[i] + p <= 5) {// a[i]   i  5        
					for (int j = 0; j < p; j++) {
						if (j == p - 1)
							System.out.print(i * 5 + a[i] + j + 1);
						else
							System.out.print(i * 5 + a[i] + j + 1 + " ");
					}
					a[i] += p;
					flag = true;
					break;
				}
			}
			//               ,         
			if (!flag) {
				int num = 0;
				for (int i = 0; i < 20; i++) {
					if (a[i] < 5) {
						num++;
						if (num == p) {
							System.out.print(i * 5 + a[i] + 1);
							break;
						} else
							System.out.print(i * 5 + a[i] + 1 + " ");
						a[i]++;
						i--;//                ,   , a[i]=5     
					}
				}
			}
			System.out.println();
		}

		sc.close();
	}
}

좋은 웹페이지 즐겨찾기