温度計が n 回測った値を順に記録したが、測れなかったときは空行として残った。 一行目に n が与えられ、続く n 行はそれぞれ整数一つか空行(空白もない行)である。 各行について結果を一行ずつ出力せよ:整数があればその数を、空行ならそれより前で最も最近記録された数を書く。 前に記録された数が一つもなければ "なし" を書く。 0 と負の数も記録された数である。
入力
1 ≤ n ≤ 1,000、-1,000 ≤ 記録された数 ≤ 1,000
出力
n 行、数または "なし"
例 1 · stdin
5
3
0
stdout
なし
3
3
0
0
例 2 · stdin
3
-1
stdout
-1
-1
-1
main.py
エラー一覧00F8 ↓ · ⇧F8 ↑
入力(stdin)
実行すると、これらの行が順に input()・標準入力に渡されます(実行中に入力を求めません)。
$ 準備完了
コードを入力して解くにはパソコンで開いてください。モバイルでは問題と解答を見られます。
ほかの言語では?言語別の解答を見る · 8 言語の解答
「まだ値がない」を入れる方法は言語ごとに違います。 Python None(last is None で確かめる)、JS null、TS number | null(strict モードでは確かめる前に数として使えない)、Java は int に null を入れられないので Integer(null のまま計算すると NullPointerException)、C# は int?(HasValue、??)、C++17 は std::optional<int>、Craykon は なし。 C の int には「なし」がまったくないので、bool has = false(<stdbool.h>)のような真偽値を別に持ちます。 落とし穴は三つ:① 「なし」を 0 や -1 のような特別な数で代用すると、本物の 0・-1 と区別できません(例 2)。 ② if (last)・if last: のように真偽で聞くと、JS と Python は 0 も偽と見なすので、0 を読んだあとに "none" が出ます — last === null、last is None のように null かどうかを別に聞きます。 ③ 空行は null ではなく空文字列 "" です(Craykon コンソール.行読み() も空行なら ""、入力が終わって初めて なし)。 これをそのまま数にすると Python int("") は ValueError、Java Integer.parseInt("") は NumberFormatException で止まり、JS Number("") と C atoi("") は黙って 0 になります。 だから数にする前に、空行かどうかを文字のまま確かめます。
Pythonmain.py · 7 行
n = int(input())last = None # 아직 읽은 수가 없음for _ in range(n): line = input() if line != "": last = int(line) print("なし" if last is None else last)
JavaScriptmain.js · 10 行
const lines = require("fs").readFileSync(0, "utf8").split("\n");const n = Number(lines[0]);let last = null; // 아직 읽은 수가 없음const out = [];for (let i = 1; i <= n; i++) { // Number("")는 0이라서 빈 줄인지 먼저 글자로 확인한다 if (lines[i] !== "") last = Number(lines[i]); out.push(last === null ? "なし" : last);}console.log(out.join("\n"));
TypeScriptmain.ts · 11 行
import { readFileSync } from "node:fs";const lines: string[] = readFileSync(0, "utf8").split("\n");const n: number = Number(lines[0]);let last: number | null = null; // 아직 읽은 수가 없음const out: string[] = [];for (let i = 1; i <= n; i++) { // Number("")는 0이라서 빈 줄인지 먼저 글자로 확인한다 if (lines[i] !== "") last = Number(lines[i]); out.push(last === null ? "なし" : String(last));}console.log(out.join("\n"));
JavaMain.java · 18 行
import java.io.BufferedReader;import java.io.IOException;import java.io.InputStreamReader;public class Main { public static void main(String[] args) throws IOException { BufferedReader in = new BufferedReader(new InputStreamReader(System.in)); int n = Integer.parseInt(in.readLine().trim()); Integer last = null; // int는 null을 담을 수 없어 Integer를 쓴다 StringBuilder out = new StringBuilder(); for (int i = 0; i < n; i++) { String line = in.readLine(); if (!line.isEmpty()) last = Integer.parseInt(line); out.append(last == null ? "なし" : last.toString()).append('\n'); } System.out.print(out); }}
C#Main.cs · 19 行
using System;using System.Text;class Program{ static void Main() { int n = int.Parse(Console.ReadLine()); int? last = null; // int? 는 null도 담는 int var out_ = new StringBuilder(); for (int i = 0; i < n; i++) { string line = Console.ReadLine(); if (line != "") last = int.Parse(line); out_.Append(last.HasValue ? last.Value.ToString() : "なし").Append('\n'); } Console.Write(out_); }}
C++main.cpp · 16 行
#include <iostream>#include <optional>#include <string>int main() { std::string line; std::getline(std::cin, line); int n = std::stoi(line); std::optional<int> last; // 처음에는 값이 없음 for (int i = 0; i < n; i++) { std::getline(std::cin, line); if (!line.empty()) last = std::stoi(line); if (last) std::cout << *last << '\n'; else std::cout << "なし\n"; }}
Cmain.c · 22 行
#include <stdbool.h>#include <stdio.h>#include <stdlib.h>int main(void) { char line[32]; fgets(line, sizeof line, stdin); int n = atoi(line); /* C의 int에는 '값 없음'이 없어서 따로 참·거짓 하나를 둔다 */ bool has = false; int last = 0; for (int i = 0; i < n; i++) { fgets(line, sizeof line, stdin); if (line[0] != '\n' && line[0] != '\0') { last = atoi(line); has = true; } if (has) printf("%d\n", last); else puts("なし"); } return 0;}
Craykonmain.cray · 18 行
n = コンソール.行読み().数に();마지막 = なし;繰り返す (i = 0; i < n; i++){ 줄 = コンソール.行読み(); もし (줄 != "") { 마지막 = 줄.数に(); } もし (마지막 == なし) { コンソール.書く("なし"); } でなければ { コンソール.書く(마지막); }}