중국 대학 MOOC- 실제 데이터 구조와 알고리즘 - 우 예 -3- 간단한 시뮬레이션을 단일 큐 (20 분)

간단한 시뮬레이션 프로그램 대기열의 단일 멀티 윈도우 모드 :
은행 고객이 원하는 자유에 대기실 그렇지 않으면 거부 할 수있는 경우 액세스 고정 고객 대기실을 수용 할 수있는 N의 은행이 제공했다.
은행 창구 아무도 수를 호출하지 않는 경우 지역 대기 번호, 멀리 처음부터 비즈니스 여행 카운터의 대기 영역에 고객 대기실을 호출 할 때마다 전화 번호가 잘못되었습니다.

입력 형식 :

입력의 첫 번째 라인은 20보다 큰 양의 정수가 N저장할 수있는 영역을 기다리고 뱅크 수를 나타내고,
다음 행이 "발생한 시간 순서의 숫자로 표현된다 顾客想进银行"또는 " 叫号"이벤트 포맷은 :

  • 顾客想进银行와  In <id> , 어디 <id>고객 번호, 크지 100,000 이하의 양의 정수;
  • 叫号Calling표현입니다.

마지막 라인은 인 #입력의 종료를 나타내는 기호.
참고 :

  1. 각 고객이 고유한지 확인하기 위해 제목 번호를 입력, 즉 : 고객이 이미 같은 수의 대기실에 일어나지 않을 것 은행의 고객에 가고 싶다.
  2. 이벤트 사이의 "동기화"문제를 고려해야 할 필요가 : 이벤트 후 특정 이벤트 후 보장은 전, 즉 완료되기 전에 발생합니다.

출력 형식 :

각각의 입력 이벤트를 동일한 순서로 라인, 즉 포맷의 경우에 결과 출력 :

  • 顾客想进银行고객이 입력하면, 출력  <id> joined. Total:<t> 의는 <id>고객의 수이며, <t>고객이 대기 영역의 번호를 입력 한 후
  • 顾客想进银行문제 대기실이 가득하고 거부되면, 출력이  <id> rejected. 있는 <id>고객의 수
  • 叫号고객이 카운터에 가서 경우, 출력  <id> called. Total:<t> 의이 <id>고객의 수이며, <t>이후 카운터로 이동 영역을 기다리는 고객의 수
  • 叫号아니, 대기실, 출력 No one!

샘플 입력 :

3
In 101
In 102
In 103
In 104
Calling
In 105
Calling
Calling
Calling
Calling
#

샘플 출력 :

101 joined. Total:1
102 joined. Total:2
103 joined. Total:3
104 rejected.
101 called. Total:2
105 joined. Total:3
102 called. Total:2
103 called. Total:1
105 called. Total:0
No one!

코드 :
수입 큐 
N = 평가 (입력 ()) 
m = 0 
Q = queue.Queue () 
진정한 동안 : 
    문자열 = 입력 () 스플릿 (). 
    만약 문자열 [0] == "#" 
        브레이크 
    ELIF 문자열 [0] = = "에서" 
        : m <N 만약 
            m = m + 1 
            q.put (문자열 [1]) 
            인쇄 ( "{} 접합 합계 :. {}". 형식 (문자열 [1, m)) 
        다른 : 
            프린트 ( "{}는 거부."형식 (문자열 [1])). 
    ELIF 문자열 [0] == "호출" 
        하는 경우 q.empty () : 
            인쇄 ( "아무도!") 
        그렇지 않으면 : 
            m = m - 1 
            = q.get () 
            인쇄 ( "{}라고합니다.총 :. {} "형식의 (a, m))

  

추천

출처www.cnblogs.com/intbjw/p/11795131.html