{ }codelper
空值 null布尔值读取 n 行P0047

空白用前一个值补上

温度计按顺序记录了 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
输入(stdin)

运行时这些行会依次作为 input()/标准输入传入(运行中不会等待输入)。

$ 就绪

请在电脑上打开以编写和运行代码。在手机上可以查看题目和题解。

其他语言怎么写?查看各语言题解 · 8 种语言题解

表示“还没有值”的方法因语言而异。
Python None(用 last is None 判断),JS null,TS number | null(严格模式下判断之前不能当数字用),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"——要单独判断是否为 null:last === null、last is None。
③ 空行不是 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++){    줄 = 控制台.读行();    如果 (줄 != "")    {        마지막 = 줄.转数字();    }    如果 (마지막 == 空)    {        控制台.输出("无");    }    否则    {        控制台.输出(마지막);    }}