怡山小學畢業文藝晚會上,拉丁舞是最受歡迎的節目。不過,每年為了排練這個節目,舞蹈組都會出現一些糾紛。有些同學特別受歡迎,有些卻少人問津,因此安排舞伴成為舞蹈組陳老師最頭疼的問題。
為了解決這一問題,今年陳老師決定讓按先男生後女生,先低號後高號的順序,每個人先報上自己期待的舞伴,每人報兩位,先報最期待的舞伴。接下來按先男生後女生,先低號後高號的順序,依次按以下規則匹配舞伴:
(1)每個人均按志願順序從前到後確定舞伴。如果第一志願匹配不成功,則考慮第二志願。
(2)如果a的當前志願為b,則如果b未匹配舞伴,且有以下情形之一者,a和b匹配成功:
2a) b的期待名單中a。
2b) b的期待名單中沒有a,但b期待的兩位舞伴均已匹配成功,所以b只能與a湊合。
輸入時先輸入男生數m, 接下來m行,第一項為學生的姓名,後兩項為期待舞伴的編號,編號從0開始,最大為女生數減1。接下來輸入女生數f,接下來f行,第一項為學生的姓名,後兩項為期待舞伴的編號,編號從0開始,最大為男生數減1。
輸出時按男生的編號順序輸出 姓名:舞伴姓名
注意兩個姓名間有冒號隔開
student的兩個成員函式:
void
printpair()
;void
addpair()
;
#include
#include
using namespace std;
const
int k=2;
const
int n=20;
class student
void
printpair()
;void
addpair()
;};/* 請在這裡填寫答案 */
intmain()
cin>>f;
for(i=
0;i)for
(i=0
;i) male[i]
.addpair()
;for
(i=0
;i) female[i]
.addpair()
;for
(i=0
;i) male[i]
.printpair()
;return0;
}
5
m0 3 1
m1 1 3
m2 1 4
m3 3 1
m4 0 3
5f0 0 2
f1 2 0
f2 2 1
f3 2 4
f4 3 2
m0:f1
m2:f4
m4:f0
(1)m0先選擇f3, 但f3並未期待m0;接下來m0選擇f1, f1也期待m0,故匹配成功。
(2)m1選擇f1, 但f1已匹配,故,不成功;m1選擇f3,但f3未期待m1,仍然不成功。
(3)m2選擇f1,f1已匹配;m2選擇f4, f4未匹配且也期待m2,故匹配成功。
(4)m3選擇f3,但f3未期待他,不成功;m3選擇f1,f1已匹配,不成功。
(5)m4選擇f0, f0不期待m4,但是f0期待的m0和m2已分配,所以湊合,匹配成功。
(6)f0已匹配, f1已匹配。
(7)f2選擇m2, m2已匹配,不成功; f2選擇m1, m1未匹配,但期待表中沒有f2,且f3也未分配,故不成功。
(8)f3選擇m2, m2已匹配,不成功;f3選擇m4, m4已匹配,不成功。
(9)f4已匹配。
void student:
:addpair()
}for
(int j=
0;j<
2;j++
)//如果期待的名單上未匹配成功,則考慮湊合情況}}
}void student:
:printpair()
C 之物件陣列與物件指標
是指每乙個陣列元素都是物件的陣列,也就是說,若乙個類有若干個物件,我們把一系列的物件用乙個陣列來存放。物件陣列的元素是物件,不僅具有資料成員,而且還有函式成員。格式 類名 陣列名 下標表示式 在建立陣列時,同樣要呼叫建構函式。有幾個陣列元素就要呼叫幾次建構函式。1 當只需要乙個引數時,在定義物件陣列...
C 物件陣列與this指標
標籤 空格分隔 c 版本 2該文章僅被發布於作業部落 原 csdn 由於在c 中我們可以直接操作堆和棧,所以在宣告時我們也需要選擇陣列的建立方式。有一種最顯而易見的方法去判斷變數的儲存狀態,就是看物件建立時有沒有用new關鍵字。1,棧陣列棧物件 顧名思義就是陣列和物件都在當前棧中分配,帶來的好處就是...
bool指標 如何賦值 C 物件陣列與物件指標
所謂物件陣列是指每一陣列元素都是物件的陣列,也就是說,若乙個類有若干個物件,則把這一系列的物件用乙個陣列來存放。物件陣列的元素是物件,不僅具有資料成員,而且還有函式成員 定義乙個一維陣列的格式如下 類名 陣列名 下標表示式 exam ob 4 定義了類exam的物件陣列ob.與基本資料型別的陣列一樣...