我的问题是

例如,

成人人数= 4

儿童人数= 3

有两个房间。

每个房间都有最小成人数和最大成人数限制以及最小儿童数和最大儿童数限制。我需要预订两个房间,每个房间都包含成人和儿童的有效组合,可能会有许多有效组合,但是一旦获得有效组合,我就完成了。

例如,


  room1最少可容纳2位成人,最多可容纳3位成人
  
  room1最小的孩子= 1,最大的孩子= 1
  
  room2最低成人人数= 1,最大成人人数= 1
  
  room2最小儿童= 1,最大儿童= 2


我已将成人人数分为以下几组
设置1:[4,0] [0,4] [1,3] [3,1] [2,2]

我已将孩子人数分为以下几组
设置2:[3,0] [0,3] [1,2] [2,1]

有效组合的示例是1个房间中的3名成人和1个孩子,而2号房间中的1个成人和2个孩子。

我需要用Java实现。我不知道如何解决这个问题,不知道要使用什么数据结构以及什么编程技术。

最佳答案

首先,您创建一个类Range,以指定最小值和最大值。
接下来,创建一个具有2个范围的教室。
接下来,您将创建一个具有2个属性的RoomOccupation类:成人的nr和儿童的nr。
接下来,向Room类添加一个方法,以生成包含所有允许组合的Set。

接下来是棘手的部分:您遍历两个房间的2套可能的职业,将每个职业的nr个成年人加在一起,并将其与需要一个房间的人数相匹配。如果所有总数都匹配=>宾果游戏。棘手的是,由于您有2个房间,因此可以很容易地将其编程为2个循环。如果要使程序独立于房间数,则必须消除此double循环并使用递归。相反,您可以创建一个List>。递归方法将使用参数索引来遍历此list.get(index)。如果index == list.size-1并且总数匹配-> bingo,则以index + 1作为参数递归调用该方法。

10-06 13:03