【クラス・構造体メニュー】> FINAL問題【静的メンバ】静的メンバ (paizaランク B 相当) [難易度: 1813 ±19]
※リンク先へ移動するためには[paiza]へのログインが必要です。
居酒屋で働きながらクラスの勉強をしていたあなたは、お客さんをクラスに見立てることで勤務時間中の店内の人数や注文の情報を管理できることに気付きました。
全てのお客さんは、ソフトドリンクと食事を頼むことができます。加えて 20 歳以上のお客さんはお酒を頼むことができます。
20 歳未満のお客さんがお酒を頼もうとした場合はその注文は取り消されます。
また、お酒(ビールを含む)を頼んだ場合、以降の全ての食事の注文 が毎回 200 円引きになります。
今回、この居酒屋でビールフェスをやることになり、ビールの注文が相次いだため、いちいちビールの値段である 500 円を書くのをやめ、注文の種類と値段を書く代わりに 0 とだけを書くことになりました。
勤務時間の初めに店内にいるお客さんの人数と与えられる入力の回数、各注文をしたお客さんの番号とその内容、または退店したお客さんの番号が与えられます。
お客さんが退店する場合はそのお客さんの会計を出力してください。勤務時間中に退店した全てのお客さんの会計を出力したのち、勤務時間中に退店した客の人数を出力してください。
入力値(例)
2 3
20
30
1 0
2 0
1 A
出力値(例)
500
1
解答例
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 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 |
<?php class Customer { public $payment = 0; private static $counter = 0; public function __construct($payment) { $this->payment = $payment = 0; } public static function GetNumberOfVisitors() { return Customer::$counter; } public function GetPayment() { Customer::$counter++; return $this->payment; } public function OrderFood($price) { $this->payment += $price; } public function OrderSoftDrink($price) { $this->payment += $price; } public function OrderAlcohol($price = 500) { // 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 = 500) { $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++) { $input = explode(" ", trim(fgets(STDIN))); $index = $input[0]; $index--; $order = $input[1]; if($order == "A") { echo $customers[$index]->GetPayment(). "\n"; } elseif($order == 0) { $order = "beer"; } else { $price = $input[2]; } switch($order) { case "food": $customers[$index]->OrderFood($price); break; case "softdrink": $customers[$index]->OrderSoftDrink($price); break; case "alcohol": $customers[$index]->OrderAlcohol($price); break; case "beer": $customers[$index]->OrderAlcohol(); break; } } //print_r($customers); echo Customer::GetNumberOfVisitors(). "\n"; ?> |