日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

7-1 银行业务队列简单模拟 (25 分)

發(fā)布時(shí)間:2025/6/17 编程问答 37 豆豆
生活随笔 收集整理的這篇文章主要介紹了 7-1 银行业务队列简单模拟 (25 分) 小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

題目:

設(shè)某銀行有A、B兩個(gè)業(yè)務(wù)窗口,且處理業(yè)務(wù)的速度不一樣,其中A窗口處理速度是B窗口的2倍 —— 即當(dāng)A窗口每處理完2個(gè)顧客時(shí),B窗口處理完1個(gè)顧客。給定到達(dá)銀行的顧客序列,請按業(yè)務(wù)完成的順序輸出顧客序列。假定不考慮顧客先后到達(dá)的時(shí)間間隔,并且當(dāng)不同窗口同時(shí)處理完2個(gè)顧客時(shí),A窗口顧客優(yōu)先輸出。

輸入格式:

輸入為一行正整數(shù),其中第1個(gè)數(shù)字N(≤1000)為顧客總數(shù),后面跟著N位顧客的編號。編號為奇數(shù)的顧客需要到A窗口辦理業(yè)務(wù),為偶數(shù)的顧客則去B窗口。數(shù)字間以空格分隔。

輸出格式:

按業(yè)務(wù)處理完成的順序輸出顧客的編號。數(shù)字間以空格分隔,但最后一個(gè)編號后不能有多余的空格。

輸入樣例:

8 2 1 3 9 4 11 13 15

輸出樣例:

1 3 2 9 11 4 13 15

思路:

創(chuàng)建兩個(gè)隊(duì)列,一個(gè)存放A窗口的客戶,另一個(gè)存放B窗口的客戶,并分別統(tǒng)計(jì)兩個(gè)窗口的人數(shù)。既然是不考慮顧客先后到達(dá)的時(shí)間間隔的話,那就統(tǒng)一輸出就可以了。

  • 輸出兩個(gè)A窗口的客戶 + 一個(gè)B窗口的客戶。
  • 當(dāng)A窗口的客戶為一個(gè)的時(shí)候且B窗口的客戶大于等于一個(gè)的時(shí)候就輸出一個(gè)A窗口的客戶 + 一個(gè)B窗口的客戶。
  • 當(dāng)A或B兩個(gè)中有一個(gè)隊(duì)列為空就退出循環(huán)。
  • 然后單獨(dú)輸出那個(gè)不為空的隊(duì)列里的客戶就可以了。
  • 一開始把這個(gè)題想的太復(fù)雜了,后來仔細(xì)考慮了一下題中給出的條件,發(fā)現(xiàn)其實(shí)挺簡單的。

    代碼:

    #include <bits/stdc++.h> using namespace std; typedef long long ll; const ll MOD = 2147493647; const int maxn = 1e5+10; typedef struct QNode {int data;struct QNode *next; } QNode,*QueuePtr;typedef struct {QueuePtr frot;QueuePtr rear; } LinkQueue;bool initQueue(LinkQueue& Q) {Q.frot = Q.rear = (QueuePtr)malloc(sizeof(QNode));if(!Q.frot)exit(-2);Q.frot->next = NULL;return true; }bool DestroyQueue(LinkQueue& Q) {while(Q.frot) {Q.rear = Q.frot->next;free(Q.frot);Q.frot = Q.rear;}return true; }bool EnQueue(LinkQueue& Q, int e) {QueuePtr p = (QueuePtr)malloc(sizeof(QNode));if(p==NULL) {exit(-2);}p->data = e;p->next = NULL;Q.rear->next = p;Q.rear = p;return true; }bool DeQueue(LinkQueue& Q,int& e) {if(Q.frot==Q.rear)return false;QueuePtr p = Q.frot->next;e = p->data;Q.frot->next = p->next;if(Q.rear == p)Q.rear == Q.frot;free(p);return true; }bool isEmpty(LinkQueue& Q){if(Q.frot==Q.rear){return true;}return false; }int main() {int n;LinkQueue A,B;initQueue(A);initQueue(B);int even = 0,odd = 0,tmp;bool isfirst = true;cin>>n;for(int kk = 0; kk<n; kk++) {cin>>tmp;if(tmp&1) {EnQueue(A,tmp);even++;} else {EnQueue(B,tmp);odd++;}}while(even&&odd){if(even>=2 && odd>=1){int a,b,c;DeQueue(A,a);DeQueue(A,b);DeQueue(B,c);even-=2;odd--;if(isfirst){cout<<a<<" "<<b<<" "<<c;isfirst = false;}elsecout<<" "<<a<<" "<<b<<" "<<c;}else if(even==1 && odd>=1){int a,b;DeQueue(A,a);DeQueue(B,b);even--;odd--;if(isfirst){cout<<a<<" "<<b;isfirst = false;}else{cout<<" "<<a<<" "<<b;}}}while(even){int a;DeQueue(A,a);if(isfirst){cout<<a;isfirst = false;}else{cout<<" "<<a;}even--;}while(odd){int a;DeQueue(B,a);if(isfirst){cout<<a;isfirst = false;}else{cout<<" "<<a;}odd--;}return 0; } /* 樣例輸入: 8 2 1 3 9 4 11 13 15 樣例輸出: 1 3 2 9 11 4 13 15 */ View Code

    ?

    轉(zhuǎn)載于:https://www.cnblogs.com/sykline/p/9784466.html

    總結(jié)

    以上是生活随笔為你收集整理的7-1 银行业务队列简单模拟 (25 分)的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

    如果覺得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。