プロが教える店舗&オフィスのセキュリティ対策術

Javaでモンスターブリーダーのプログラムを作成する方法を教えてください。

1.プログラムの説明(サンプルケース参照)
(1)モンスターの状態(ここではA,B,Cとする)
レベル: 1, 1, 1
固有の値: 2, 3, 1
自分が分け与えられる経験値の合計:10

(2)これらのモンスターのレベルを上げるには、i匹目のモンスターは固有の値aiを持っており、レベルを1増やすのに(モンスターiの現在のレベル)×aiの経験値が必要。

(3)Aのモンスターのレベルを上げるには、レベル(1)× 固有値(2)= 2 の経験値が必要。
→レベル:2、経験値:2

(4)Aのモンスターのレベルを上げるには、レベル(2)×固有値(2)=4 の経験値が必要。
→レベル:3、経験値:2+4=6

(5)Aのモンスターのレベルを上げるには、レベル(3)× 固有値(2)= 6 の経験値が必要。

(6)経験値合計:2+4+6=12
→自分が持っている経験値は10なので、モンスターAをレベル4に上げることはできない。

※他のモンスターに残りの4の経験値を使う場合は・・・という感じになる。

(7)必要な経験値が最も小さくなるものから順次与えていっている

(8)その時点で最も必要な経験値が小さくなるモンスターを探して、そのモンスターに経験値を与えていき、自分の持っている経験値では足りなくなったら終了する。

2.作成方法
① 入力値を元に、各モンスターの固有値、およびレベルを確保するものとして、配列を2つ用意する。

② 固有値は入力する。(配列に入力) →経験値:全て1

③ 使用する経験値の合計が持っている経験値(入力)を超えないように繰り返し処理する。
(永久ループを使って、使用する経験値の合計が持っている経験値を超えたら抜ける。)

④ ループの中では、先のサンプルでみたように、その時点での必要経験値が最も小さくなるモンスターが何番目のモンスターかを探す。(最小値探しと同じ)

⑤ 見つかったら、その番号のモンスターに必要な経験値を手持ちの経験値から引き、そのモンスターのレベルを上げる。
A.必要な経験値が手持ちの経験値の残りでは足りないよう場合
終了でループを抜抜ける。

B.足りている場合
回数をカウントする。

3.入力値
N(モンスターの数)、X(自由に割り振れる経験値)
a_1 ~ a_N (N個の各モンスター固有の値)

4.出力値
モンスターのレベルを上げることのできる最大の回数を出力

5.サンプルケース
<入力値>
3 ,10
2, 3, 1
<出力値>
4

A 回答 (1件)

てきとうな人に十分なお金を渡すのがいいと思うぞ.

    • good
    • 0

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!