駅の荷物ロッカーの基本料金は b ウォンである。 荷物を預けた時間が h 時間以下なら、追加料金はない(0 ウォン)。 預けた時間が h 時間より長ければ、追加料金 e ウォンを一度だけ加えて払う。 一行目に b、h、e が空白一つで区切って与えられる。 二行目に客の数 n が与えられる。 続く n 行に、客ごとの荷物を預けた時間 t が一行に一つずつ与えられる。 客ごとに払う料金(基本料金 + 追加料金)を、入力の順に一行に一つずつ出力せよ。
入力
1 ≤ b ≤ 10,000、1 ≤ h ≤ 100、1 ≤ e ≤ 10,000、1 ≤ n ≤ 100、1 ≤ t ≤ 200(すべて整数)
出力
n 行に、客ごとの料金を一つずつ。 カンマや単位をつけず数字だけを書く
例 1 · stdin
1000 3 500
3
2
3
5
stdout
1000
1000
1500
例 2 · stdin
700 24 700
2
24
25
stdout
700
1400
main.py
エラー一覧00F8 ↓ · ⇧F8 ↑
入力(stdin)
実行すると、これらの行が順に input()・標準入力に渡されます(実行中に入力を求めません)。
$ 準備完了
コードを入力して解くにはパソコンで開いてください。モバイルでは問題と解答を見られます。
ほかの言語では?言語別の解答を見る · 8 言語の解答
三項演算子は二つの値のうち一つを選ぶ式なので、足し算の中にそのまま入れられます。 C・C++・Java・C#・JS・TS・Craykon は 条件 ? 真のときの値 : 偽のときの値 の順なので b + (t <= h ? 0 : e) と書き、Python だけが 真のときの値 if 条件 else 偽のときの値 の順なので b + (0 if t <= h else e) と書きます。 落とし穴その一:かっこを外すと + が先に結びつきます。 C・C++・Java・C#・JS・TS・Craykon で b + t <= h ? 0 : e は (b + t <= h) ? 0 : e と読まれ、料金が 0 か e になります(例 1 が 500 500 500 になります)。 Python で b + 0 if t <= h else e は (b + 0) if t <= h else e と読まれ、時間を超えた客が e だけを払います(例 1 が 1000 1000 500 になります)。 落とし穴その二:三項演算子の代わりに JS (t <= h && 0) || e や Python t <= h and 0 or e でまねると、前の値 0 が偽として扱われ、条件が真でも e が出ます(例 1 が 1500 1500 1500 になります)。 落とし穴その三:「h 時間以下」は <= です。 < と書くと、ちょうど h 時間預けた客も追加料金を払います(例 1 が 1000 1500 1500 になります)。
Pythonmain.py · 7 行
b, h, e = map(int, input().split())n = int(input())for _ in range(n): t = int(input()) # 값 if 조건 else 값 — 덧셈 안에 넣을 때는 괄호로 묶는다 fee = b + (0 if t <= h else e) print(fee)
JavaScriptmain.js · 10 行
const nums = require("fs").readFileSync(0, "utf8").trim().split(/\s+/).map(Number);const [b, h, e, n] = nums;const out = [];for (let i = 0; i < n; i++) { const t = nums[4 + i]; // 조건 ? 값 : 값 — 덧셈 안에 넣을 때는 괄호로 묶는다 const fee = b + (t <= h ? 0 : e); out.push(fee);}console.log(out.join("\n"));
TypeScriptmain.ts · 11 行
import { readFileSync } from "node:fs";const nums: number[] = readFileSync(0, "utf8").trim().split(/\s+/).map(Number);const [b, h, e, n] = nums;const out: number[] = [];for (let i = 0; i < n; i++) { const t: number = nums[4 + i]; // 조건 ? 값 : 값 — 덧셈 안에 넣을 때는 괄호로 묶는다 const fee: number = b + (t <= h ? 0 : e); out.push(fee);}console.log(out.join("\n"));
JavaMain.java · 15 行
import java.util.Scanner;public class Main { public static void main(String[] args) { Scanner sc = new Scanner(System.in); int b = sc.nextInt(), h = sc.nextInt(), e = sc.nextInt(); int n = sc.nextInt(); for (int i = 0; i < n; i++) { int t = sc.nextInt(); // 조건 ? 값 : 값 — 덧셈 안에 넣을 때는 괄호로 묶는다 int fee = b + (t <= h ? 0 : e); System.out.println(fee); } }}
C#Main.cs · 18 行
using System;class Program{ static void Main() { string[] head = Console.ReadLine().Split(' ', StringSplitOptions.RemoveEmptyEntries); int b = int.Parse(head[0]), h = int.Parse(head[1]), e = int.Parse(head[2]); int n = int.Parse(Console.ReadLine()); for (int i = 0; i < n; i++) { int t = int.Parse(Console.ReadLine()); // 조건 ? 값 : 값 — 덧셈 안에 넣을 때는 괄호로 묶는다 int fee = b + (t <= h ? 0 : e); Console.WriteLine(fee); } }}
C++main.cpp · 13 行
#include <iostream>int main() { int b, h, e, n; std::cin >> b >> h >> e >> n; for (int i = 0; i < n; i++) { int t; std::cin >> t; // 조건 ? 값 : 값 — 덧셈 안에 넣을 때는 괄호로 묶는다 int fee = b + (t <= h ? 0 : e); std::cout << fee << "\n"; }}
Cmain.c · 14 行
#include <stdio.h>int main(void) { int b, h, e, n; if (scanf("%d %d %d %d", &b, &h, &e, &n) != 4) return 0; for (int i = 0; i < n; i++) { int t; if (scanf("%d", &t) != 1) return 0; /* 조건 ? 값 : 값 — 덧셈 안에 넣을 때는 괄호로 묶는다 */ int fee = b + (t <= h ? 0 : e); printf("%d\n", fee); } return 0;}
Craykonmain.cray · 12 行
head = コンソール.数読み();b = head[0];h = head[1];e = head[2];n = コンソール.行読み().数に();繰り返す (i = 0; i < n; i++){ t = コンソール.行読み().数に(); // 조건 ? 값 : 값 — 덧셈 안에 넣을 때는 괄호로 묶는다 fee = b + (t <= h ? 0 : e); コンソール.書く(fee);}