消消乐<免费版>

大家支持一下小学生,点个关注呗~

题目描述

小爱观察奶奶玩的消消乐游戏,他想自己设计一个类似的程序。

程序要求:给定由 n 个数组成的数列,其中相邻的两个数字如果相同就可以相互消除,然后后面的数字按照顺序向前移动填补空位,填补之后如果依然出现相邻数字相同,则继续消除并移动,直至不存在能相互消除的数字为止。

现在请您验算一下,给定的数列能否实现全部消除(数列中的每一个数都被消除掉)。如果能输出 YES ,否则输出 NO 。

输入格式

第一行一个正整数 n (n≤1000) , n 一定为偶数,不必讨论。

第二行为 n 个空格隔开的正整数( int 范围内 )

输出格式

输出 YES 或 NO

样例 #1

样例输入 #1

10
1 2 3 3 2 1 1 2 2 1

样例输出 #1

YES

知识纲要

栈是什么 

栈(可以当作死胡同):FILO,先进后出(所以只能对最后的元素进行操作)

 栈的头文件

#include<stack>

定义栈

stack<T>//容器名
stack<int> stk;

栈的函数常用应用

stk.push(x);//入栈 
stk.pop();//尾元素出栈 
stk.top();//调用栈的的尾元素 
stk.size();//遍历栈的元素个数 
stk.empty();//如果栈为空返回值为true 

 

 解题思路

输入这个栈,如果栈尾(stk.top)等于新的x,消除栈尾,不是就把新x存进栈。结束后判断栈是否为空,是就输出对,不是就输出错。

代码 

无讲解版

#include<bits/stdc++.h>
using namespace std;
int main(){
	int n;
	stack<int>stk;
	cin>>n;
	int x;
	for(int i=1;i<=n;i++)
	{
		cin>>x;
		if(stk.empty()||x!=stk.top())
		{
			stk.push(x);
		} 
		else if(x==stk.top())
		{
			stk.pop();
			continue;
		}
	}
	if(stk.empty())
	{
		cout<<"YES";
	}
	else
	{
		cout<<"NO";
	}
	return 0;
}

附讲解版

/*csdn博客,钓鱼的肝,csdn bocker,fishing's liver,csdn buoke,diaoyudegan*/
#include<bits/stdc++.h>
//万能头 
using namespace std;
int main(){
	//主函数 
	int n;
	//定义n(操作次数) 
	stack<int>stk;
	//定义栈 
	cin>>n;
	//输入n 
	int x;
	//定义x 
	for(int i=1;i<=n;i++)//循环n次 
	{
		cin>>x;//输入x 
		if(stk.empty()||x!=stk.top())//判断 
		{
			stk.push(x);
			//入栈 
		} 
		else if(x==stk.top())
		{
			stk.pop();
			//栈为出栈 
			continue;
		}
	}
	if(stk.empty())//判断是否为空 
	{
		cout<<"YES";//是 
	}
	else
	{
		cout<<"NO";//否 
	}
	return 0;//返回0 
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值