专栏文章

题解:P1427 小鱼的数字游戏

P1427题解参与者 1已保存评论 0

文章操作

快速查看文章及其快照的属性,并进行相关操作。

当前评论
0 条
当前快照
1 份
快照标识符
@mip6io0c
此快照首次捕获于
2025/12/03 06:58
3 个月前
此快照最后确认于
2025/12/03 06:58
3 个月前
查看原文
这道题目要求我们输入一串数字,以 0 结尾,然后倒序输出这些数字(不输出 0

1. 思路

  • 使用栈(Stack):栈是一种**后进先出(LIFO)**的数据结构,正好符合“倒序输出”的需求。
  • 输入时存入栈:每读一个数字(非 0),就压入栈(push)。
  • 依次弹出栈顶元素:栈顶永远是最后输入的元素,弹出一个打印一个,直到栈空。

2. 关键点

  • stack<int> s:定义一个栈,用来存储输入的数字。
  • while (cin >> x && x != 0)
    • 持续读取输入,直到遇到 0 停止。
    • 所有非 0 的数字都会被压入栈。
  • s.top():获取栈顶元素(最后输入的数)。
  • s.pop():弹出栈顶,使下一个元素成为新的栈顶。
  • if (!s.empty()) cout << " ";
    • 控制空格,确保最后一个数字后面没有多余的空格。

3. 模拟

输入:
CPP
3 65 23 5 34 1 30 0
执行过程:
  1. 依次读取数字,压入栈:
    CPP
    | 30 |
    | 1  |
    | 34 |
    | 5  |
    | 23 |
    | 65 |
    | 3  |
    
  2. 依次弹出并输出:
    • 30(栈顶)→ 134523653(栈底)
  3. 最终输出:
    CPP
    30 1 34 5 23 65 3
    

    4.代码实现

CPP

#include<bits/stdc++.h>
using namespace std;
stack<int> s;  // 定义一个栈,用来存储数字
int x;         // 用于读取输入的数字

int main() {
    // 读取输入,遇到0时停止
    while(cin >> x && x != 0)
    {
        s.push(x);  // 把数字压入栈
    }
    // 依次弹出栈顶元素并输出
    while(!s.empty())
    {
        cout<<s.top();  // 输出栈顶元素
        s.pop();          // 弹出栈顶
        if (!s.empty())   // 如果栈不为空,补一个空格
            cout << " ";
    }
    return 0;
}
好的话点个赞吧!

评论

0 条评论,欢迎与作者交流。

正在加载评论...