小鱼的数字游戏

GitHub跳转原题关系图返回列表

读入以 0 结尾的整数序列,删除结尾标记后反转列表并输出。

OJ: luogu

题目 ID: P1427

难度:入门

标签:模拟列表python

日期: 2026-07-15 18:44

题意

输入一串整数,最后一个 0 表示结束标记,不属于要输出的数字。要求把前面的数字倒序输出。

思路

这一题可以直接把整行读成列表。

因为题目保证只有末尾一个 0,所以:

  1. numbers.pop() 删除最后的 0
  2. numbers.reverse() 原地反转列表;
  3. print(*numbers) 输出。

这题主要训练列表的删除、反转和展开输出,不创建额外 brute.py

Python 知识

  • /home/rainboy/mycode/hugo-blog/content/program_language/python/input_output_and_strings.md:用 list(map(int, input().split())) 读取整行整数。
  • /home/rainboy/mycode/hugo-blog/content/program_language/python/oj_input_output_cheatsheet.md:整行整数且换行无特殊意义时,可以直接按空白切分。
  • numbers.pop() 删除并返回列表最后一个元素。
  • numbers.reverse() 原地反转列表。
  • print(*numbers) 按空格输出列表内容。

代码

python
numbers = list(map(int, input().split()))
numbers.pop()

numbers.reverse()

print(*numbers)
cpp
/**
 * Author by Rainboy blog: https://rainboylv.com github: https://github.com/rainboylvx
 * rbook: -> https://rbook.roj.ac.cn  https://rbook2.roj.ac.cn
 * rainboy的学习导航网站: https://idx.roj.ac.cn
 * create_at: 2026-07-27 00:00
 * update_at: 2026-07-27 00:00
 */

#include <bits/stdc++.h>
using namespace std;

int a[105]; // 存储输入的数字(不含末尾的 0)
int n;      // 数字个数

int main() {
    int x;
    // 读到 0 为止,0 不存入数组
    while (cin >> x) {
        if (x == 0) break;
        a[++n] = x;
    }
    // 倒序输出
    for (int i = n; i >= 1; i--) cout << a[i] << " ";
    return 0;
}

Pythonic 写法

切片反向:

python
print(*list(map(int, input().split()))[-2::-1])

复杂度

设输入数字个数为 n。反转和输出都是 O(n)O(n),空间复杂度是 O(n)O(n)

总结

这题是典型的列表操作练习。先去掉结束标记,再反转真正的数据,逻辑会很清楚。