我正在编写一个程序,对家庭的客人名单进行排序,除了一部分外,我的一切工作正常。每个家庭都有一个优先号码,以及家庭中参加聚会的人数。但是,如果只能邀请优先级别的某些家庭而不是所有家庭,则会跳过整个优先级,并立即停止填写访客列表。我在尝试将逻辑放入代码时遇到了一些麻烦。
这是我的功能代码:
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,CAPACITY为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
第一个数字是家庭成员的数量,第二个数字是优先级别。假设我已经按优先级对列表进行了排序。有人有主意吗?如果你不明白我想做什么,我可以更深入地解释。
答案 0 :(得分:1)
您的问题是您的内部while
循环不会增加索引,因此您只添加第一个优先级系列1中的与会者。由于您按优先级对列表进行排序,因此您需要执行增量操作在i
循环中while
,而不是仅在for
循环中。请注意,因为这可能会干扰i
循环中for
的增量。