题解:P1427 小鱼的数字游戏
Three_body_hqc · · 题解
这道题目要求我们输入一串数字,以 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. 模拟
输入:
3 65 23 5 34 1 30 0
执行过程:
- 依次读取数字,压入栈:
| 30 | | 1 | | 34 | | 5 | | 23 | | 65 | | 3 | - 依次弹出并输出:
30(栈顶)→1→34→5→23→65→3(栈底)
-
最终输出:
30 1 34 5 23 65 34.代码实现
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; }
好的话点个赞吧!