バスケットボール部の記録表に、選手 n 人のフリースローの記録が書かれている。 最初の行に n が与えられる。 続く n 行に、選手ごとに入れた回数 m と投げた回数 t が空白一つで区切って与えられる。 選手の成功率は、m を t で割った値に 100 を掛けた値である。 選手ごとに一行ずつ、与えられた順に成功率を小数第一位まで四捨五入して出力せよ。 小数第一位は 0 でも必ず書き(50.0、100.0)、パーセント記号は付けない。 一度も投げていない選手(t が 0)は成功率を決められないので、その行にはマイナス記号 - を一つだけ出力する。
入力
1 ≤ n ≤ 100、0 ≤ m ≤ t ≤ 1000(すべて整数)。 成功率に 10 を掛けた値の小数部分がちょうど 0.5 になる入力は与えられない
n = int(input())for _ in range(n): m, t = map(int, input().split()) if t == 0: print("-") # 0으로 나누면 ZeroDivisionError — 나누기 전에 먼저 묻는다 else: # Python 3의 /는 정수끼리도 소수까지 나눈다(//는 몫만) print(f"{m / t * 100:.1f}")
JavaScriptmain.js · 9 行
const [n, ...v] = require("fs").readFileSync(0, "utf8").trim().split(/\s+/).map(Number);const out = [];for (let i = 0; i < n; i++) { const m = v[2 * i]; const t = v[2 * i + 1]; // JS의 0 / 0은 오류가 아니라 NaN이다 — 나누기 전에 먼저 묻는다 out.push(t === 0 ? "-" : ((m / t) * 100).toFixed(1));}console.log(out.join("\n"));
TypeScriptmain.ts · 10 行
import { readFileSync } from "node:fs";const [n, ...v]: number[] = readFileSync(0, "utf8").trim().split(/\s+/).map(Number);const out: string[] = [];for (let i = 0; i < n; i++) { const m: number = v[2 * i]; const t: number = v[2 * i + 1]; // 0 / 0은 오류가 아니라 NaN이다 — 나누기 전에 먼저 묻는다 out.push(t === 0 ? "-" : ((m / t) * 100).toFixed(1));}console.log(out.join("\n"));
JavaMain.java · 22 行
import java.util.Locale;import java.util.Scanner;public class Main { public static void main(String[] args) { Scanner sc = new Scanner(System.in); int n = sc.nextInt(); StringBuilder out = new StringBuilder(); for (int i = 0; i < n; i++) { int m = sc.nextInt(); int t = sc.nextInt(); if (t == 0) { out.append("-\n"); } else { // 나누기 전에 한쪽을 double로 바꿔야 소수가 남는다 double rate = (double) m / t * 100; out.append(String.format(Locale.ROOT, "%.1f", rate)).append('\n'); } } System.out.print(out); }}
C#Main.cs · 29 行
using System;using System.Globalization;using System.Text;class Program{ static void Main() { int n = int.Parse(Console.ReadLine()); var sb = new StringBuilder(); for (int i = 0; i < n; i++) { string[] p = Console.ReadLine().Split(' ', StringSplitOptions.RemoveEmptyEntries); int m = int.Parse(p[0]); int t = int.Parse(p[1]); if (t == 0) { sb.Append("-\n"); } else { // 나누기 전에 한쪽을 double로 바꿔야 소수가 남는다 double rate = (double)m / t * 100; sb.Append(rate.ToString("F1", CultureInfo.InvariantCulture)).Append('\n'); } } Console.Write(sb); }}
C++main.cpp · 19 行
#include <iomanip>#include <iostream>int main() { int n; std::cin >> n; std::cout << std::fixed << std::setprecision(1); for (int i = 0; i < n; i++) { int m, t; std::cin >> m >> t; if (t == 0) { std::cout << "-\n"; } else { // 나누기 전에 한쪽을 double로 바꿔야 소수가 남는다 double rate = static_cast<double>(m) / t * 100; std::cout << rate << "\n"; } }}
Cmain.c · 18 行
#include <stdio.h>int main(void) { int n; scanf("%d", &n); for (int i = 0; i < n; i++) { int m, t; scanf("%d %d", &m, &t); if (t == 0) { puts("-"); } else { /* 나누기 전에 한쪽을 double로 바꿔야 소수가 남는다 */ double rate = (double)m / t * 100; printf("%.1f\n", rate); } } return 0;}
Craykonmain.cray · 16 行
n = コンソール.行読み().数に();繰り返す (i = 0; i < n; i++){ 기록 = コンソール.数読み(); m = 기록[0]; t = 기록[1]; もし (t == 0) { コンソール.書く("-"); } でなければ { // 크레이콘의 /는 늘 소수까지 나눈다 コンソール.書く(文字.桁そろえ(m / t * 100, 1)); }}