P1427 小鱼的数字游戏--洛谷
我们用栈来实现
java:
import java.util.Scanner;
import java.util.Stack;
public class Main {
public static void main(String[] args) {
Scanner scanner = new Scanner(System.in);
Stack<Integer> stack = new Stack<>();
// 输入一串整数
while (true) {
int num = scanner.nextInt();
if (num == 0) {
break;
}
stack.push(num);
}
// 反着输出整数
while (!stack.isEmpty()) {
System.out.print(stack.pop() + " ");
}
}
}
c++:
#include<iostream>
using namespace std;
int a[101];//如果你的第一个数存储在a[1]里,一定要多开一两个空间 ,以防越界访问
int top=0,c;
int main(){
while(1){
cin>>c;
if(c==0) break;
a[++top]=c;
/*
或者写成:
top++;
a[top]=c;
个人比较喜欢压码……
*/
}
while(top!=0){
cout<<a[top--]<<" ";
/*
或者写成:
cout<<a[top];
top--;
*/
}
return 0;
}
P1739 表达式括号匹配 --洛谷
java:
import java.util.Stack;
public class BracketMatching {
public static void main(String[] args) {
Scanner scanner=new Scanner(System.in)
String expression = scanner.nextLine()+"@";
if (checkBracketMatching(expression)) {
System.out.println("YES");
} else {
System.out.println("NO");
}
}
public static boolean checkBracketMatching(String expression) {
Stack<Character> stack = new Stack<>();
for (int i = 0; i < expression.length(); i++) {
char ch = expression.charAt(i);
if (ch == '(') {
stack.push(ch);
} else if (ch == ')') {
if (stack.isEmpty()) {
return false; // 右括号多于左括号,不匹配
}
stack.pop();
}
}
return stack.isEmpty(); // 左括号多于右括号,不匹配
}
}
c++:
#include<iostream>
#include<cstdio>
#include<iomanip>
#include<cstring>
#include<algorithm>
using namespace std;
char n;
struct Stack{
int top,a[100000];
void inti(){top=0;}//创建一个空栈
void push(int x){a[++top]=x;}//在栈顶插入元素
void pop(){if(top) top--;}//删除栈顶元素
int empty(){if(top>0) return 0;else return 1;}//判断栈是否为空
int quary(){return a[top];}//返回栈顶值
}z;
int main(){
z.inti();
while(cin>>n){//循环输入
if(z.empty()){
if(n==')'){//判断第一个是否为),如果是,就不可能匹配
cout<<"NO";
return 0;
}
}
if(n=='(') z.push(n);//入栈
if(n==')') z.pop();//出栈
}
if(z.empty()) cout<<"YES";//判断栈是否为空,是就输出yes,不是输出no
else cout<<"NO";
return 0;
}