0

我的问题是,

例如,

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

4

2 回答 2

1

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

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

于 2013-09-05T11:00:53.203 回答
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++;
}

等等

编辑后:Room r = roomsMap.get(roomNumber); 编辑 r,放回 r

于 2013-09-05T10:54:31.323 回答