2011-11-24 68 views
2

我正在編寫一個程序,對來賓列表中的家庭進行排序,除了一部分以外,我已經可以正常工作了。每個家庭都會得到一個優先號碼,同時還會給出參加聚會的家庭人數。但是,如果只有來自優先級別的一些家庭可以被邀請,而不是全部,則整個優先級別被跳過,並且賓客列表立即停止被填充。我在嘗試將邏輯放入代碼時遇到了一些麻煩。難以製作循環

這是我該函數代碼:

Check_Capacity(int FAMILIES_KNOWN, int CAPACITY, int Family_Members[], int Priority[]) 
{ 
    int i, num_families = 0, num_guests = 0, count = 0; 

    for(i = 0; i < FAMILIES_KNOWN; i++) 
    { 
     count++; 

     while(Priority[i] == count) 
     { 
      num_guests += Family_Members[i]; 

      if(num_guests <= CAPACITY) 
      { 
       num_families++; 
      } 

      else 
      { 
       break; 
      } 
     } 
    } 
    return num_families; 
} 

該代碼產生7個家庭參加派對,和24名成員。它應該是8個家庭和26個家庭成員。我很興奮,因爲我認爲我已經完成了這個項目,但是我們的老師補充說,我們必須確保優先級被視爲「整體」。

在這種情況下,FAMILIES_KNOWN是10和容量爲30以下是嘉賓名單:

BEN JOHNSON 4 2 
DOUG ESPINOSA 3 2 
SARAH TELLINGER 5 3 
GRANT THOMPSON 5 2 
JENNIFER WEST 7 6 
JACKSON JOHNSON 1 5 
MARTY MCFLY 4 1 
ELIZABETH JAMES 2 6 
MICKEY MOUSE 2 4 
RAJ SHAH 2 5 

第一個數字是家庭成員的數量,而第二個數字是優先級。假設我已經按優先級對列表進行了排序。有人有主意嗎?如果你不明白我想要做什麼,我可以更深入地解釋。

+1

嘗試更改「我 N0ug4t

+0

啊,我不認爲這樣做是大聲笑。它訣竅,現在看看它是否適用於更多的測試用例。 –

+0

Nvm。當我試過時,我已經打開了以前版本的文件。不要這樣做:P。 –

回答

1

你的問題是,你的內心while循環不增加索引,所以你只優先級加法從優先1.第一家庭參加既然你排序列表,所有你需要的增量i做你的while循環,而不是僅在您的for循環中。請小心,因爲這可能會干擾for循環中i的增量。

+0

我在調用Check_Capacity之前先對它進行排序。 –

+0

在這種情況下,你只需要在'while'循環中增加'i'。我已經更新了我的答案。 – drdwilcox

+1

順便說一下,因爲你增加了內部'if'測試中的家庭數量,但是在其外部的客人數量上,你總會在家庭數量和客人數量之間出現差異。你或者需要做或者兩者都做。這就是你從好醫生那裏得到的所有提示。 – drdwilcox