Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/369.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/email/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 为房间选择成人和儿童的有效组合_Java_Data Structures_Backtracking - Fatal编程技术网

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

Java 为房间选择成人和儿童的有效组合,java,data-structures,backtracking,Java,Data Structures,Backtracking,我的问题是 比如说, 成人人数=4 儿童人数=3 有两个房间 每个房间都有最小成人和最大成人限制以及最小儿童和最大儿童限制。我需要预订两个房间,每个房间都有成人和儿童的有效组合,可能有很多有效组合,但一旦我得到有效组合,我就完成了 比如说, 房间1最小成人=2人,最大成人=3人 房间1最小儿童数=1,最大儿童数=1 房间2最小成人=1,最大成人=1 房间2最小儿童数=1,最大儿童数=2 我把成年人分成以下几组 第1组:[4,0][0,4][1,3][3,1][2,2] 我把孩子们分成以下几组 第

我的问题是

比如说,

成人人数=4

儿童人数=3

有两个房间

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

比如说,

房间1最小成人=2人,最大成人=3人

房间1最小儿童数=1,最大儿童数=1

房间2最小成人=1,最大成人=1

房间2最小儿童数=1,最大儿童数=2

我把成年人分成以下几组 第1组:[4,0][0,4][1,3][3,1][2,2]

我把孩子们分成以下几组 第二组:[3,0][0,3][1,2][2,1]

有效组合的示例为1号房间的3名成人和1名儿童,2号房间的1名成人和2名儿童

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

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));
等等

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

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


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

只需先满足最小要求,然后将剩余部分填入每个房间的最大值。问题的作者似乎是一个学习者。我相信,如果你解释解决方案是如何工作的,而不是向他们提供一个完整的解决方案,对他们会有更好的帮助。你能为我提供一个小片段,说明你在第二段第二部分提到的内容吗?
if room is 1, and person is child
   if (maxchildren in room> children in room){
childrenInRoom++;
}