老鷹抓小雞是小孩很喜歡玩的一種遊戲,他的玩法是由一人扮演老鷹,一人扮演母雞,其他人扮演小雞,所有小雞都要躲在母雞身後。遊戲開始後老鷹會去抓跟不上母雞的小雞,當老鷹抓到小雞,就結束一回合的遊戲,被抓到的小雞會改扮演老鷹,老鷹則被排進被抓到的小雞原本的位置中,改扮演小雞,然後就開始下一回合的遊戲。
請寫一個程式模擬遊戲後的隊伍情況。
範例測資
範例輸入 | 範例輸出 |
---|---|
輸入總共五列,第一列有一個整數 N (2 ≤ N ≤ 2000),表示小雞的總數量。第二列有 N 個整數ㄝ代表一開始扮演小雞的人的編號 Ci (1 ≤ Ci ≤ 10000,1 ≤ i ≤ N)。 第三列有一個整數 E (1 ≤ E ≤ 10000),代表一開始扮演老鷹的人的編號。第四列有一個整數 Q (1 ≤ Q ≤ 200),代表經過幾回合的遊戲。第五列有 Q 個整數,代表每一回合被抓到的小雞的編號。整數之間以空白間隔。 | 輸出一行,為 Q 回合遊戲結束後小雞的編號序列,編號間以一個空白間隔。 |
2 13 35 5 1 35 | 13 5 |
5 54 88 9 21 27 76 3 88 9 21 | 54 76 88 9 27 |
7 90 91 92 93 94 95 96 75 5 93 95 96 75 93 | 90 91 92 96 94 75 95 |
解題思路
使用 Vector 先將小雞的編號收起來,可以使用 Vector<int>::iterator 來判斷某一個編號的陣列位置為何,這樣就可以將老鷹的編號和被抓到的小雞編號進行互換。
範例程式碼-ZeroJudge F442: 老鷹抓小雞 Eagle
#include <iostream>
#include <vector>
#include <algorithm>
using namespace std;
int main() {
cin.sync_with_stdio(0);
cin.tie(0);
int N;
cin >> N;
vector<int>chicken;
for (int i = 0; i<N; i++)
{
int tmp;
cin >> tmp;
chicken.push_back(tmp);
}
int eagle;
cin >> eagle;
int Q;
cin >> Q;
for (int i = 0; i<Q; i++)
{
int tmp;
cin >> tmp;
vector<int>::iterator it = find(chicken.begin(), chicken.end(), tmp);
if (it != chicken.end())
{
swap(eagle, chicken[distance(chicken.begin(), it)]);
}
}
for (int i = 0; i<N; i++)
{
cout << chicken[i] << " ";
}
cout << "\n";
}
//ZeroJudge F442
//Dr. SeanXD