0

私の問題は、

例えば、

大人の数 = 4

子供の数 = 3

2つの部屋があります。

各部屋には、大人の最小数と大人の最大数の制限と、子供の最小数と子供の最大数の制限があります。各部屋に大人と子供の有効な組み合わせで 2 つの部屋を予約する必要があります。有効な組み合わせがいくつかある場合がありますが、有効な組み合わせが得られたら完了です。

例えば、

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 クラスを作成します。次に、許可されたすべての組み合わせを含む Set を生成する Room クラスにメソッドを追加します。

次はトリッキーな部分です: 両方の部屋の可能な職業の 2 つのセットをループし、各職業の nr 大人を合計に追加し、これを部屋を必要とする人の数に一致させます。すべての合計が一致した場合 => ビンゴ。注意が必要なのは、2 つの部屋があるため、2 つの for ループで簡単にプログラムできることです。プログラムを部屋の数に依存しないようにしたい場合は、この二重の for ループを排除し、再帰を使用する必要があります。代わりに、List> を作成できます。再帰的メソッドは、パラメーター インデックスを使用して、この list.get(index) をループします。index == list.size-1 と合計数が一致する場合 -> bingo そうでない場合は、 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 に答える