我的问题是,
例如,
成人人数= 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中实现它。我不知道如何解决这个问题以及使用什么数据结构和编程技术。
答案 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