【クラス・構造体メニュー】> 【静的メンバ】STEP: 4 クラスの継承 (paizaランク B 相当) [難易度: 1934 ±23]
※リンク先へ移動するためには[paiza]へのログインが必要です。
paiza 国の大衆居酒屋で働きながらクラスの勉強をしていたあなたは、お客さんをクラスに見立てることで店内の情報を管理できることに気付きました。
全てのお客さんは、ソフトドリンクと食事を頼むことができます。
paiza 国の法律では、 20 歳以上のお客さんは成人とみなされ、お酒を頼むことができます。
20 歳未満のお客さんは未成年とみなされ、お酒を頼もうとした場合はその注文は取り消されます。
また、お酒を頼んだ場合、以降の全ての食事の注文 が毎回 200 円引きになります.
店内の全てのお客さんの数と注文の回数、各注文をしたお客さんの番号とその内容が与えられるので、各お客さんの会計を求めてください。
ヒント
注文について、20 歳未満のお客さんにできて、 20 歳以上のお客さんにできないことはないので、20歳未満のお客さんのクラスを作成して、それを継承して 20歳以上のお客さんのクラスを作成することで効率よく実装することができます。
入力値(例)
2 5
59
5
2 food 1223
1 alcohol 4461
1 alcohol 4573
1 alcohol 1438
2 softdrink 1581
出力値(例)
10472
2804
解答例
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 |
<?php class Customer { public $payment = 0; public function __construct($payment) { $this->payment = $payment = 0; } public function GetPayment() { return $this->payment; } public function OrderFood($price) { $this->payment += $price; } public function OrderSoftDrink($price) { $this->payment += $price; } public function OrderAlcohol($price) { // echo "お酒は20歳になってから"; } } class AdultCustomer extends Customer { public $discount; public function __construct($discount) { $this->discount = $discount = false; } public function OrderFood($price) { $this->payment += $this->discount ? $price - 200 : $price; } public function OrderAlcohol($price) { $this->payment += $price; if (!$this->discount) { $this->discount = true; } } } list($n, $k) = explode(" ", trim(fgets(STDIN))); for($i=0; $i<$n; $i++) { $age = trim(fgets(STDIN)); if($age<20) { $customers[] = new Customer($age); } else { $customers[] = new AdultCustomer($age); } } for($i=0; $i<$k; $i++) { list($index, $order, $price) = explode(" ", trim(fgets(STDIN))); $index--; switch($order) { case "food": $customers[$index]->OrderFood($price); break; case "softdrink": $customers[$index]->OrderSoftDrink($price); break; case "alcohol": $customers[$index]->OrderAlcohol($price); break; } } //print_r($customers); for($i=0; $i<$n; $i++) { echo $customers[$i]->GetPayment(). "\n"; } ?> |