P1427 小鱼的数字游戏——栈的初次会面
题目描述
小鱼最近被要求参加一个数字游戏,要求它把看到的一串数字 a_iai(长度不一定,以 00 结束),记住了然后反着念出来(表示结束的数字 00 就不要念出来了)。这对小鱼的那点记忆力来说实在是太难了,你也不想想小鱼的整个脑袋才多大,其中一部分还是好吃的肉!所以请你帮小鱼编程解决这个问题。
输入格式
一行内输入一串整数,以 00 结束,以空格间隔。
输出格式
一行内倒着输出这一串整数,以空格间隔。
输入输出样例
输入 #1复制
3 65 23 5 34 1 30 0
输出 #1复制
30 1 34 5 23 65 3
来自 <https://www.luogu.com.cn/problem/P1427?contestId=46635>
题目大意:倒序输出
1,可以反转数组,然后输出
这个相对简单,不在这里细讲
2,利用栈先进后出(后进先出的原理),这是我们今天主要讲的方法
首先了解下栈的概念:
栈(stack)又名堆栈,它是一种运算受限的线性表。限定仅在表尾进行插入和删除操作的线性表。这一端被称为栈顶,相对地,把另一端称为栈底。向一个栈插入新元素又称作进栈、入栈或压栈,它是把新元素放到栈顶元素的上面,使之成为新的栈顶元素;从一个栈删除元素又称作出栈或退栈,它是把栈顶元素删除掉,使其相邻的元素成为新的栈顶元素。
简单说就像一个杯子,它是一个单端的结构,先入后出,后入先出,只要把杯顶的东西倒出来,杯底的才能拿出
栈常用的几个方法:
*stack.empty()判断是否为空
*stack.peek()取栈顶的值(不出栈)
*stack.push()进栈
*stack.pop()出栈
接下来放下源码,这个题就是进栈和出栈的一个简单过程
结合代码看看大致即可了解
//JAVA版:
import java.io.*;
public class 小鱼的数字游戏 {public static void main(String[] args) throws IOException {StreamTokenizer r = new StreamTokenizer(new BufferedReader(new InputStreamReader(System.in)));PrintWriter pr = new PrintWriter(new OutputStreamWriter(System.out));//这个我们用的是一个快输体java.util.Stack stack = new java.util.Stack();boolean flag = true;while (flag) {r.nextToken();//识别换行的作用int temp = (int) r.nval;//输入数据if (temp == 0) {break;} else {stack.push(temp);//入栈}}int length = stack.size();for (int i = 0; i < length; i++) {if (i != length - 1) {pr.print(stack.pop() + " ");//出栈pr.flush();} else {pr.print(stack.pop());pr.flush();}}}
}
最后我们来看看顺序栈与链式栈中各个操作的算法复杂度(时间和空间)对比,
顺序栈复杂度如下:
操作 时间复杂度
SeqStack空间复杂度(用于N次push) O(n)
push()时间复杂度 O(1)
pop()时间复杂度 O(1)
peek()时间复杂度 O(1)
isEmpty()时间复杂度 O(1)
链式栈复杂度如下:
操作 时间复杂度
SeqStack空间复杂度创建(用于N次push) O(n)
push()时间复杂度 O(1)
pop()时间复杂度 O(1)
peek()时间复杂度 O(1)
isEmpty()时间复杂度 O(1)
由此可知栈的主要操作都可以在常数时间内完成,这主要是因为栈只对一端进行操作,而且操作的只是栈顶元素。
栈的特性可以运用到许多的地方,后续我们会继续探究......
P1427 小鱼的数字游戏——栈的初次会面相关推荐
- 洛谷——P1427 小鱼的数字游戏
P1427 小鱼的数字游戏 题目描述 小鱼最近被要求参加一个数字游戏,要求它把看到的一串数字 a_ia**i(长度不一定,以 00 结束),记住了然后反着念出来(表示结束的数字 00 就不要念出来了) ...
- 洛谷[P1427]小鱼的数字游戏
题目传送门OvO 题目描述 小鱼最近被要求参加一个数字游戏,要求它把看到的一串数字(长度不一定,以0结束,最多不超过100个,数字不超过 2 32 − 1 2^{32}-1 232−1),记住了然后反 ...
- P1427 小鱼的数字游戏(洛谷)
本文转自某洛谷神牛,一道水题竟然能想出如此多的做法,佩服 题目描述 小鱼最近被要求参加一个数字游戏,要求它把看到的一串数字(长度不一定,以0结束,最多不超过100个,数字不超过2^32-1),记住了然 ...
- 数组——洛谷#P1427 小鱼的数字游戏(Python实现)
题目描述 小鱼最近被要求参加一个数字游戏,要求它把看到的一串数字(长度不一定,以0结束,最多不超过100个,数字不超过2^32-1),记住了然后反着念出来(表示结束的数字0就不要念出来了).这对小鱼的 ...
- P1427 小鱼的数字游戏
题目描述 小鱼最近被要求参加一个数字游戏,要求它把看到的一串数字 a_i(长度不一定,以 0 结束),记住了然后反着念出来(表示结束的数字 0 就不要念出来了).这对小鱼的那点记忆力来说实在是太难了, ...
- luogu P1427 小鱼的数字游戏
传送门 今天是2019.5.27 距离NOIP2019还有165天 今天起手先刷一道大水题练手感 题目很简单 正序输入倒序输出 没个数 然而我一开始把它想成了一道字符串的题 后来发现多位数会颠倒数位 ...
- 洛谷P1427 小鱼的数字游戏c语言
今天搞道_(:з」∠)_水题 #include<stdio.h> int main() {int i,j;int a[100]={0};int c=0;for(i=0;;i++){ sca ...
- p1427小鱼的数字游戏
解题思路: 1.创建一个int类型的数组a 2.创建变量x,num num=0 3.每次输入一个数,如果这个数等于0的话,中断循环 4.下标的书签,将x存入数组中 5.输出a" &q ...
- 洛谷P1427小鱼的数字游戏(JAVA)
题目如图 解法1: import java.util.Scanner;public class Main {public static void main(String[] args) {Scanne ...
- 洛谷(小鱼的数字游戏、进制转换、Cableway、Quasi Binary)
小鱼的数字游戏: 代码: #include<iostream> #include<cstring> #include<algorithm> using namesp ...
最新文章
- [Matlab] 线性卷积圆周卷积代码实现
- UA MATH566 统计理论8 置信区间简介
- java集合框架介绍_Java集合框架介绍
- Socket.IO聊天室~简单实用
- 各自然带代表植被_必备知识:植被与地理环境
- Java 11就在这里,您准备好进行切换了吗?
- 主进程中发生javascript错误_你知道 JavaScript 中的错误对象有哪些类型吗?
- 迷宫问题(信息学奥赛一本通-T1255)
- 路由器与计算机IP配置,电脑的IP地址和DNS等参数如何设置
- java中scort意思_java入门—笔记
- 复选框式查询 例题租房子
- flask从表单中的提交中获取数据(不使用第三方库)
- SPSS论证有这样的问题或错误?【SPSS 068期】
- java文件传输加密_java程序对于文件的加密和解密
- 【时间之外】金融数据中心机房应对监管(最新出炉)
- HBase Coprocessor实现HBase二级索引
- 【STM32】TCL2543CN 12位11通道ADC芯片stm驱动程序,使用32自带SPI实现
- oppo手机怎么关闭Android,OPPO手机必须关闭的3个设置,让你的手机永不卡顿,再用3年...
- 蛋蛋读UFS之二:UFS协议栈
- Hyper-V 2016 系列教程33 学习型服务器推荐