1 ≤ n ≤ 1,000,1,000 ≤ 订单金额 ≤ 1,000,000(整数),顾客类型为 M 或 G
输出
n 行付款金额,最后一行为总和(都只写整数,不加逗号或“韩元”)
样例 1 · stdin
4
M 25000
M 18000
G 18000
M 20000
stdout
23000
18000
21000
18000
80000
main.py
错误列表00F8 ↓ · ⇧F8 ↑
输入(stdin)
运行时这些行会依次作为 input()/标准输入传入(运行中不会等待输入)。
$ 就绪
请在电脑上打开以编写和运行代码。在手机上可以查看题目和题解。
其他语言怎么写?查看各语言题解 · 8 种语言题解
条件里面还有条件时,else 属于哪个 if 是这道题的陷阱。 在 C、C++、Java、C#、JS、TS 中,省略花括号时 else 会跟最近的内层 if 配对(dangling else)。 所以写成 if (会员) if (金额 >= 20000) 减价; else 配送费; 而只把缩进对齐到外层,结果是不满 20,000 韩元的会员被收配送费,非会员反而不收。 Craykon 也可以不写花括号,否则 同样跟最近的 如果配对。 给每个外层 if 都加上花括号就不会出错。 Python 的缩进就是语法,把 else: 放在与外层 if 相同的列就属于外层。 另一个常见错误是把两个条件合并成 会员 && 金额 >= 20000。 这样 else 不只覆盖非会员,还覆盖不满 20,000 韩元的会员。 正好 20,000 韩元是边界,要用 >= 才能打折。 总和最多 1,003,000,000 韩元,在 32 位整数范围内。
Pythonmain.py · 13 行
n = int(input())total = 0for _ in range(n): kind, amount = input().split() pay = int(amount) if kind == "M": if pay >= 20000: pay -= 2000 else: pay += 3000 # 비회원은 금액과 상관없이 배달비 print(pay) total += payprint(total)
JavaScriptmain.js · 19 行
const lines = require("fs").readFileSync(0, "utf8").split("\n");const n = Number(lines[0]);const out = [];let total = 0;for (let i = 1; i <= n; i++) { const [kind, amount] = lines[i].trim().split(" "); let pay = Number(amount); if (kind === "M") { if (pay >= 20000) { pay -= 2000; } } else { pay += 3000; // 비회원은 금액과 상관없이 배달비 } out.push(pay); total += pay;}out.push(total);console.log(out.join("\n"));
TypeScriptmain.ts · 20 行
import { readFileSync } from "node:fs";const lines: string[] = readFileSync(0, "utf8").split("\n");const n = Number(lines[0]);const out: number[] = [];let total = 0;for (let i = 1; i <= n; i++) { const [kind, amount] = lines[i].trim().split(" "); let pay = Number(amount); if (kind === "M") { if (pay >= 20000) { pay -= 2000; } } else { pay += 3000; // 비회원은 금액과 상관없이 배달비 } out.push(pay); total += pay;}out.push(total);console.log(out.join("\n"));
JavaMain.java · 26 行
import java.io.BufferedReader;import java.io.InputStreamReader;public class Main { public static void main(String[] args) throws Exception { BufferedReader in = new BufferedReader(new InputStreamReader(System.in)); int n = Integer.parseInt(in.readLine().trim()); StringBuilder out = new StringBuilder(); long total = 0; for (int i = 0; i < n; i++) { String[] p = in.readLine().trim().split(" "); int pay = Integer.parseInt(p[1]); if (p[0].equals("M")) { if (pay >= 20000) { pay -= 2000; } } else { pay += 3000; // 비회원은 금액과 상관없이 배달비 } out.append(pay).append('\n'); total += pay; } out.append(total).append('\n'); System.out.print(out); }}
C#Main.cs · 32 行
using System;using System.Text;class Program{ static void Main() { int n = int.Parse(Console.ReadLine()); var sb = new StringBuilder(); long total = 0; for (int i = 0; i < n; i++) { string[] p = Console.ReadLine().Trim().Split(' '); int pay = int.Parse(p[1]); if (p[0] == "M") { if (pay >= 20000) { pay -= 2000; } } else { pay += 3000; // 비회원은 금액과 상관없이 배달비 } sb.Append(pay).Append('\n'); total += pay; } sb.Append(total).Append('\n'); Console.Write(sb); }}
C++main.cpp · 23 行
#include <iostream>#include <string>int main() { int n; std::cin >> n; long long total = 0; for (int i = 0; i < n; i++) { std::string kind; int pay; std::cin >> kind >> pay; if (kind == "M") { if (pay >= 20000) { pay -= 2000; } } else { pay += 3000; // 비회원은 금액과 상관없이 배달비 } std::cout << pay << '\n'; total += pay; } std::cout << total << '\n';}
Cmain.c · 23 行
#include <stdio.h>int main(void) { int n; scanf("%d", &n); long long total = 0; for (int i = 0; i < n; i++) { char kind[2]; int pay; scanf("%1s %d", kind, &pay); if (kind[0] == 'M') { if (pay >= 20000) { pay -= 2000; } } else { pay += 3000; /* 비회원은 금액과 상관없이 배달비 */ } printf("%d\n", pay); total += pay; } printf("%lld\n", total); return 0;}
Craykonmain.cray · 21 行
n = 控制台.读行().转数字();total = 0;循环 (i = 0; i < n; i++){ p = 控制台.读行().去空白().分割(); pay = p[1].转数字(); 如果 (p[0] == "M") { 如果 (pay >= 20000) { pay -= 2000; } } 否则 { pay += 3000; // 비회원은 금액과 상관없이 배달비 } 控制台.输出(pay); total += pay;}控制台.输出(total);