2013-10-27 41 views
1

我正在盡我所能完成此代碼。至少在幾天的時間裏,現在已經超過15個小時了,而且我仍然陷入困境。我使用C語言進行編程,這是我的第一語言,所以我有點小菜鳥,我很抱歉。任何形式的幫助都會非常有幫助。C中的穩定婚姻算法

一個快速的第一個問題:

while (manStatus[i] == -1 || womanStatus[i] == -1) 

什麼是正確的語法或辦法說,我要不斷地檢查我的數組中的元素,以查看是否有任何價值裏面有「-1」(或者在現實中,這些陣列中的男人和女人是單身的,所以不斷試圖將他們配對)。

我有更多,但這一個已經難倒了我好幾天。我會繼續與其他人一起努力,但如果任何人有一刻,我會喜歡這些對於初學者的幫助。

+2

輸入循環的概念... – 2013-10-27 22:49:37

+2

您顯示的單行代碼看起來似乎很好的語法。問題是圍繞它的許多其他代碼行,你沒有顯示。 –

+1

@CareyGregory OP明確要求「不斷檢查我的數組元素,看看裏面的值是否爲」-1「」。他想知道Python的C等價物,如果列表中的東西是:' – turnt

回答

3

在C不能簡單地期望manStatus[i] == -1檢查數組內的所有值和返回true如果匹配-1內的任何值。

相反,您需要編寫一個手動對數組中的每個元素進行細緻檢查的算法。它其實非常簡單並且使用循環。我在這裏實現了它的功能:

bool checkArray(int array[],int arrayLength, int val) 
{ 
    int i; 
    for(i = 0; i < arrayLength; i++) 
    { 
     if(array[i] == val) 
      return true; 
    } 
    return false; 
} 

現在你可以調用這個函數在你的語句:

while (checkArray(manStatus, LENGTH_OF_ARRAY, -1) || checkArray(womenStatus, LENGTH_OF_ARRAY, -1)) 
+0

非常感謝,我沒有想到把函數作爲我的while循環的條件! – user2925439

0

那麼,有lsearch可能會方便,但這是一個非標準的功能。

定義一個輔助函數來檢查值是否在數組中。

int containsInt(int *array, size_t length, int value) { 
    size_t i; 
    for(i = 0; i < length; i++) { 
     if(array[i] == value) { 
      return 1; 
     } 
    } 
    return 0; 
} 

然後你的支票變成,

while(!containsInt(manStatus, numMen, -1) && !containsInt(womanStatus, numWomen, -1)) 
0

如果您要檢查在manStatus陣列中的任何值是-1,你可以這樣做:

#define NON_WITH_MINUS_ONE 0 
#define SOME_WITH_MINUS_ONE 1 
int checkMarriage(int *manStatus,int N) 
{ 
    for(i=0;i<N;i++) 
    if(manStatus[i]==-1) 
     return SOME_WITH_MINUS_ONE 
    return NON_WITH_MINUS_ONE 
} 

其中N是數數組中的元素。然後你可以調用這個函數,例如通過

if(checkMarriage(manStatus, 20)==1) 
{//do something} 
else 
{ //do something else} 
0

有了你這樣做的方式,如果您運行的男性或在另一個陣容耗盡之前,女性會陷入無限循環。

跳出循環一次就不可能有更多的比賽,最好的辦法是:

while (manStatus[i] == -1` && `womanStatus[i] == -1) 
+0

真的很好,謝謝! – user2925439

0

讓我在看數學點第一個答案。根據我的理解,你有兩個有限集合(幸福的是地球上的人數是有限的...... Hugh)。第一個,我將表示S w是一組女性(女士們的第一個傢伙!)。第二個是男裝:S m

現在,你想從小號一雙女W¯¯與男性從小號。不能保證每套的基數相同。我會表示他們 = | S i |,其中i∈{w,m}。

假設我們有瓦特>米(嘿嘿),那麼所有你所要做的就是選擇一個子集小號瓦特,男m的女性躋身瓦特是在小號瓦特(有瓦特/((W! - 米)!米)這種子集),然後設置一個雙射S和之間小號瓦特,米。有米!這樣的雙射。然後,通過將其他女性設置爲單一狀態(如果我正確的話,這是-1)來擴展雙射。

從現在起,你有兩種可能性:

  • 生成一個這樣的「擴展的雙射」 P和綁定男人婦女P(I)(剩下的可憐的小女人狀態-1)。
  • 給你兩套部分「配對」並且你想盡可能地配對剩下的單身。

在我走得更遠之前,你能告訴我哪個方法是你感興趣的方法嗎?