銀行業務キューの簡単なシミュレーション質問番号:1023
質問の要件:
銀行にAとBの2つのビジネスウィンドウがあり、処理速度が異なるとします。ウィンドウAの処理速度はウィンドウBの2倍です。つまり、ウィンドウAが2人の顧客を処理した場合、ウィンドウBは処理します。 1人の顧客を終了しました。銀行に到着する顧客の順序を考慮して、ビジネスが完了した順序で顧客の順序を出力してください。顧客が次々に到着する時間間隔は考慮されておらず、2人の顧客が異なるウィンドウで同時に処理される場合、ウィンドウAが最初に出力されると想定されます。
説明を入力してください
行に正の整数を入力します。最初の数値N(<= 1000)は顧客の総数であり、その後にN人の顧客の数が続きます。奇数の顧客はビジネスのためにウィンドウAに移動する必要があり、偶数の顧客はウィンドウBが必要です。番号はスペースで区切られます。
出力の説明
顧客番号は、ビジネスが処理された順序で出力されます。番号はスペースで区切られますが、最後の番号の後に余分なスペースを含めることはできません。
入力サンプル
8 2 1 3 9 4 11 13 15
サンプル出力
1 3 2 9 11 4 13 15
問題解決のアイデア:
3つの配列を定義し、そのうちの1つは入力された顧客シーケンスを受け取るために使用されます。この配列をトラバースした後、奇数と偶数は異なる配列に格納され、2つのカウンターを使用して、それぞれ奇数と偶数を格納する配列の長さを記録します。その後、奇数を2つ、偶数を1つ周期的に出力すると、出力されるたびに対応するカウンタが1ずつ減少します。両方のカウンターが0になるまで、ループを終了します。
ループ出力では、偶数と奇数の出力数が異なるため、2つのループ変数を使用してトラバースする必要があります。
通関コード:
#include <iostream>
using namespace std;
int main() {
int n;
cin >> n;
const int LEN = n;
int arr[LEN];
int odd[LEN];
int even[LEN];
for (int i = 0; i < LEN; i++) {
cin >> arr[i];
}
int count1 = 0, count2 = 0;
for (int i = 0; i < LEN; i++) {
if (arr[i] % 2 != 0) {
odd[count1] = arr[i];
count1++;
} else {
even[count2] = arr[i];
count2++;
}
}
int i = 0, j = 0;
while (count1 != 0 || count2 != 0) {
if (count1 > 0) {
cout << odd[i] << ' ';
i++;
count1--;
}
if (count1 > 0) {
cout << odd[i] << ' ';
i++;
count1--;
}
if (count2 > 0) {
cout << even[j] << ' ';
j++;
count2--;
}
}
return 0;
}
}
コンプリート。