我的问题是
例如,
成人人数=4
儿童人数=3
有两个房间。
每个房间都有最小成人和最大成人限制,最小儿童和最大儿童限制。我需要在每个房间里有成人和儿童的有效组合,可能有几个有效的组合,但是一旦我得到一个有效的组合,我就完成了。
例如,
room1最小成人=2,最大成人=3 room1最小子=1,最大子=1 room2最小成人=1,最大成人=1 room2最小子=1,最大子=2
我已将成人人数分成以下组: 1: 4,01,32,2
我已将儿童人数分为2: 3,01,2组
一个有效的组合是3名成人和1名儿童在房间1和1成人和2名儿童在room2。
我需要用Java实现这一点。我不知道如何解决这个问题,使用什么数据结构和什么编程技术。
发布于 2013-09-05 11:00:53
首先,您可以创建一个类范围,允许您指定一个最小值和最大值。接下来,创建一个具有两个范围的类空间。接下来,创建一个具有两个属性的类RoomOccupation :成人nr和儿童nr。接下来,向Room类添加一个方法,生成包含所有允许的组合的集合。
接下来是棘手的部分:你循环两个房间的2组可能的职业,将每个职业的nr成人加到一个总数中,并将其与需要一个房间的人数相匹配。如果所有的总数都匹配=>宾果。棘手的部分是,这是很容易编程为2为循环,因为你有两个房间。如果您想要使您的程序独立于房间的数量,您必须消除这个双for循环,并使用递归。相反,您可以创建一个List>。递归方法将使用参数索引来循环这个list.get(索引)。如果索引== list.size-1和总计数匹配->宾果,否则以index+1作为参数递归调用该方法。
发布于 2013-09-05 10:54:31
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
https://stackoverflow.com/questions/18634227
复制相似问题