为客房选择有效的成人和儿童组合

时间:2013-09-05 10:45:01

标签: java data-structures backtracking

我的问题是,

例如,

成人人数= 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个房间的1个成人和1个孩子以及2个成人和2个孩子。

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

2 个答案:

答案 0 :(得分:1)

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

接下来是棘手的部分:你绕过两个房间的两组可能的职业,将每个职业的成年人加入一个总数,并将其与需要房间的人数相匹配。如果所有总数匹配=>答对了。棘手的部分是,由于您有2个房间,因此可以轻松编程为2个循环。如果你想让你的程序独立于房间数量,你必须消除这个双循环和使用递归。相反,您可以创建一个List>。递归方法将使用参数索引来循环遍历此list.get(index)。如果index == list.size-1和总数匹配 - > bingo else以index + 1作为参数递归调用该方法。

答案 1 :(得分:0)

public class Room{
public int roomNumber;
public int minAdults;
public int maxAdults;
public int minChildren;
public int maxChildren;
public int numAdultsInRoom;
public int numChildrenInRoom;

public Room(int number){
this.roomNumber = number;

switch (number){
case 1:
{
minAdults = 2;
maxAdults = 3;
minChildren = 1;
maxChildren = 1;

}//case1
break;

case 2:
{
minAdults = 1;
maxAdults = 1;
minChildren = 1;
maxChildren = 2;

}//case2
break;
}//switch

numAdultsInRoom = 0;
numChildrenInRoom = 0;
}//room

}//room class
获取新输入时

HashMap<Integer,Room> roomsMap = new HashMap<Integer,Room>();

roomsMap.put(1,new Room(1));
roomsMap.put(2,new Room(2));

进入房间的人

if room is 1, and person is child
   if (maxchildren in room> children in room){
childrenInRoom++;
}

等等

编辑:房间r = roomsMap.get(roomNumber); 编辑r,放回r