OJブラシ質問レコード:バンキングキューの簡単なシミュレーション質問番号:1023

銀行業務キューの簡単なシミュレーション質問番号: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;
}
}

コンプリート。

おすすめ

転載: blog.csdn.net/weixin_45711556/article/details/108834170