[土狗之路]coursera C語言進階練習題 排隊遊戲

直接上題:

編程題#3:排隊遊戲

來源: POJ (Coursera聲明:在POJ上完成的習題將不會計入Coursera的最後成績。)

注意: 總時間限制: 1000ms 內存限制: 65536kB

描述

在幼兒園中,老師安排小朋友做一個排隊的遊戲。首先老師精心的把數目相同的小男孩和小女孩編排在一個隊列中,每個小孩按其在隊列中的位置發給一個編號(編 號從0開始)。然後老師告訴小朋友們,站在前邊的小男孩可以和他後邊相鄰的小女孩手拉手離開隊列,剩餘的小朋友重新站攏,再按前後相鄰的小男孩小女孩手拉 手離開隊列遊戲,如此往復。由於教師精心的安排,恰好可以保證每兩個小朋友都能手拉手離開隊列,並且最後離開的兩個小朋友是編號最小的和最大的兩個小朋 友。(注:只有小男孩在前,小女孩在後,且他們兩之間沒有其他的小朋友,他們才能手拉手離開隊列)。請根據老師的排隊,按小女孩編號從小到大的順序,給出 所有手拉手離開隊列的小男孩和小女孩的編號對。

輸入

用一個字符串代表小朋友隊列。字符串中只會出現兩個字符(樣例輸入裏用的是 括號但實際數據則不一定),分別代表小男孩和小女孩,首先出現的字符代表小男孩,另一個字符代表小女孩。小孩總數不超過100

輸出

按小女孩編號順序,順序輸出手拉手離開隊列的小男孩和小女孩的編號對,每行一對編號,編號之間用一個空格分隔。

樣例輸入

((()(())())(()))

樣例輸出

2 3
5 6
4 7
8 9
1 10
12 13
11 14
0 15
#include<iostream>
using namespace std;
char children[101];
int boy = 0;//記錄男生的數目
int couple = 0;//記錄狗男女的數目
char m, f;//男,女
int date() {//函數名叫yue pao 。。。
	for (int i = 0; i < 2 * boy; i++) {
		bool stay = true;
		if (children[i] == m) {
			for (int j = i + 1; j < 2 * boy; j++) {
				if (children[j] == m)
					break;//不考慮男同問題,所以這裏break,先讓後面的繼續
				if (children[j] == f) {
					children[i] = ' ';
					children[j] = ' ';
					cout << i <<' '<< j << endl;
					couple++;
					stay = false;//約到了,就不用在這浪費時間了,所以把位子清空,可以嘿嘿嘿去了。。。。
					break;
				}
			}
		}
		if (stay == false)
			break;//有人約到就跳出這層循環
	}
	if (couple != boy)//因爲只考慮異性戀,所以如果情侶數目跟男生數目不相等,就證明還有男的是單身狗,所以繼續遞歸
		date();
		return 0;
}
int main(){
	cin.getline(children, 101);
	m = children[0];//根據題意,無論第一個人長什麼樣,我們都把他當男的看
	for (int i = 0; i < 100; i++) {
		if (children[i] != m) {
			f = children[i];//不考慮有第三種性別的存在,所以長得跟男的不一樣的,一律視爲女的
			break;
		}
	}
	for (int i = 0; i < 100; i++) {
		if (children[i] == m)
			boy++;//數數有多少個男生
	}
	date();
	return 0;
}


發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章