設某銀行有A、B兩個業務視窗,且處理業務的速度不一樣,其中A視窗處理速度是B視窗的2倍 —— 即當A視窗每處理完2個顧客時,B視窗處理完1個顧客。給定到達銀行的顧客序列,請按業務完成的順序輸出顧客序列。假定不考慮顧客先后到達的時間間隔,并且當不同視窗同時處理完2個顧客時,A視窗顧客優先輸出。
輸入格式:
輸入為一行正整數,其中第1個數字N(≤1000)為顧客總數,后面跟著N位顧客的編號。編號為奇數的顧客需要到A視窗辦理業務,為偶數的顧客則去B視窗。數字間以空格分隔。
輸出格式:
按業務處理完成的順序輸出顧客的編號。數字間以空格分隔,但最后一個編號后不能有多余的空格。
輸入樣例:
8 2 1 3 9 4 11 13 15
輸出樣例:
1 3 2 9 11 4 13 15
uj5u.com熱心網友回復:
int InitQueue(SqQueue &Q){
Q.base=new int[MAXSIZE];
if(!Q.base)
return OVERFLOW;
Q.front=Q.rear=0;
return OK;
}
int DeQueue(SqQueue &Q,int &e)
{
if(Q.front==Q.rear)
return ERROR;
e=Q.base[Q.front];
Q.front=(Q.front+1)%MAXSIZE;
return OK;
}
void Print(int *arr,int n)
{
cout<<arr[0];
for(int i=1;i<n;i++)
cout<<" "<<arr[i];
}
uj5u.com熱心網友回復:
#include<stdio.h>#include<stdlib.h>
#define MAX 1000
#define error -1
typedef struct node {
int customer[MAX];
int rear;
int front;
}queue;
void add(queue* q, int item)
{
if ((q->rear + 1) % MAX == q->front)
{
printf("佇列滿\n");
return;
}
q->rear = (q->rear + 1) % MAX;
q->customer[q->rear] = item;
}
int isempty(queue* q)
{
return q->front == q->rear;
}
int deleteq(queue* q)
{
if (isempty(q))
{
printf("隊空\n");
return error;
}
q->front = (q->front + 1) % MAX;
return q->customer[q->front];
}
void initial(queue* q)
{
q->rear = q->front = 0;
}
int main()
{
int N, i, number, flag;
queue A, B;
initial(&A);
initial(&B);
scanf("%d", &N);
for (i = 0; i < N; i++)
{
scanf("%d", &number);
if (number % 2)//奇數存入A
add(&A, number);
else
add(&B, number);//偶數存入B
}
flag = 0;//標記第一個顧客
while (!isempty(&A) && !isempty(&B))//A與B都非空時間隔輸出
{
if (flag==0)
{
printf("%d", deleteq(&A));
flag = 1;
}
else
printf(" %d", deleteq(&A));
if (!isempty(&A))
printf(" %d", deleteq(&A));
printf(" %d", deleteq(&B));
}
while (!isempty(&A))
{
if (flag==0)
{
printf("%d", deleteq(&A));
flag = 1;
}
else
printf(" %d", deleteq(&A));
}
while (!isempty(&B))
{
if (!flag)
{
printf("%d", deleteq(&B));
flag = 1;
}
else
printf(" %d", deleteq(&B));
}
printf("\n");
}
uj5u.com熱心網友回復:
#include<stdlib.h>#include<stdio.h>
void Print(int);
int main() {
int n;
scanf("%d",&n);
int a[1001];
for(int k=0; k<n; k++)
{
scanf("%d",&a[k]);
}
int i=0,j=0;
while(i<n||j<n)
{
for(; i<n; i++)
if(1==a[i]%2)
{
Print(a[i++]);
break;
}
for(; i<n; i++)
{
if(1==a[i]%2)
{
Print(a[i++]);
break;
}
}
for(; j<n; j++)
{
if(0==a[j]%2)
{
Print(a[j++]);
break;
}
}
}
return 0;
}
void Print(int num) {
static int flag=0;
if(flag)
printf(" ");
else flag=1;
printf("%d",num);
}
uj5u.com熱心網友回復:
#include<stdio.h>
#include<malloc.h>
#include<stdlib.h>
int main()
{
int A[1000];
int B[1000];
int N;
int a=0, b=0, temp;
scanf("%d", &N);
for(int i=0; i<N; i++){
scanf("%d", &temp);
if(temp % 2 == 1)
A[a++] = temp;
else
B[b++] = temp;
}
int i = 0, j = 0;
if(a > 1){//A有超過兩個人,輸出兩個
printf("%d %d", A[0], A[1]);
i = 2;
}
else if(a > 0)//A有超過一個人,輸出一個
printf("%d", A[i++]);
else if(b > 0)//A沒人,B有人,輸出B一個
printf("%d", B[j++]);
if(j == 0)//輸出了A沒輸出B,輸出一個B來控制輸出一組
printf(" %d", B[j++]);
while(i < a && j < b){
if(i+1 < a){
printf(" %d %d",A[i], A[i+1]);
i += 2;
}
else
printf(" %d", A[i++]);
printf(" %d", B[j++]);
}
while(i < a)
printf(" %d", A[i++]);
while(j < b)
printf(" %d", B[j++]);
}
轉載請註明出處,本文鏈接:https://www.uj5u.com/houduan/280029.html
標籤:C語言
上一篇:用for回圈怎么編,我一臉懵
下一篇:C++多執行緒中死鎖問題