はじめに
paizaでハイアンドロー・カードゲーム問題での備忘録です。
問題が解決済みの方・わからなかった方のみ読むことを推奨します。
Paiza C問題 ハイアンドロー・カードゲーム問題文
paizaカードゲームは、複数枚の子カードそれぞれが、1枚の親カードとの強弱関係で勝負するゲーム。
どのカードにも2つの番号が書かれています。
1つ目の番号は1から10の整数、2つ目の番号は1から4の整数で表されます。
また、2つの番号の各組み合わせは1枚だけカードの束に含まれています。(同じカードが2枚以上存在しません)
2枚のカードの強弱関係は、次のルールによって決まります。
・1つ目の番号が大きいカードのほうが強い
・1つ目の番号が同じ場合、2つ目の番号が小さいカードのほうが強い
親カードと子カードの情報が与えられるので、それらの強弱関係を調べるプログラムを作成してください。
入力される値
a b
n
A_1 B_1
…
A_n B_n
1行目では親カードの情報が与えられます。親カードの1つ目の番号は a、2つ目の番号は b で表されます。
2行目では整数 n が与えられます。
3行目から n 行の入力が続き、各行では、子カード i (1 ≦ i ≦ n)の情報が与えられます。
子カード i の1つ目の番号は A_i、2つ目の番号は B_i で表されます。
期待する出力
出力の i 行目では、親カードと子カード i の強弱関係を調べたときに
親カードの方が強いならば "High"、そうでなければ "Low" と出力してください。
各行では、"High" または "Low" 以外の余分な文字、空白を含んではいけません。
最後は改行し、余計な文字、空行を含んではいけません。
条件
すべてのテストケースで以下の条件を満たします。
・1 ≦ a, A_i ≦ 10
・1 ≦ b, B_i ≦ 4
・1 ≦ n < 40
解くまでの順序1
まずは親カードと子カードの回数を取得
親カードは空白で数字が横に並んでいるので、配列でそれぞれを取得。
$parent = explode(' ',trim(fgets(STDIN)));
$times = trim(fgets(STDIN));
解くまでの順序2
for文で$timesの回数分で繰り返す必要があり、
その繰り返す度に子カードを以下のように取得していく必要がありそう。
for ($i = 0; $i < $times; $i++) {
$children = explode(' ',trim(fgets(STDIN)));
}
解くまでの順序3
後はif文をfor文の中に入れる必要があるから親カードが勝つ時のif文を書く。
それは親カードの1枚目のカードが子カードの1枚目より大きい場合と、1枚目のカードの数字が親と子が同じ場合は、親カードの2枚目が子カードの2枚目より小さい場合が勝つのでそのif文に||と&&を加えて記述する。
それ以外は負けのLOWなので、else文で良い。
if ($parent[0] > $children[0] || $parent[0] == $children[0] && $parent[1] < $children[1]) {
echo "High";
}
else{
echo "Low";
}
echo "\n";
完成文は以下
コードで何か間違った事を記載している、こうした方がいいなどありましたらご指摘して頂けると嬉しいです。
見て頂きありがとうございました。
$parent = explode(' ',trim(fgets(STDIN)));
$times = trim(fgets(STDIN));
for ($i = 0; $i < $times; $i++) {
$children = explode(' ',trim(fgets(STDIN)));
if ($parent[0] > $children[0] || $parent[0] == $children[0] && $parent[1] < $children[1]) {
echo "High";
}
else{
echo "Low";
}
echo "\n";
}