阅读背景:

UVA514 Rails 栈初步.._lx233

来源:互联网 



下面代码初始化好像是错的

//辣鸡代码....自己写的别看了
//可怕 的	一点:不要根据数据找规律.....
//而是要模拟代码的实现过程.. 比如这个是入栈的过程,不妨让计算机跑一次!!!而不是我第一遍代码发现变小就是压进去,变小就 是移出来 

//这样实现起来也特别麻烦..又比如说上午那个1/2 ,用枚举是访问遍历每个x,而不是找找什么规律谁比谁大
//↑效率就低了而且拔毛什么的 又要特判了吧 
//尤其是你自己又是n+1又是什么的就该觉得要换方向了 
#include<iostream> 
#include<stack>
using namespace std;
int target[1005];
int main()
{

	int n;
	while (cin >> n&&n != 0){
		stack<int> s;
		int a = 1, b = 1;
		///以及.... 这个从1开始的序列怎么用,最开始想用a[i]=i?怎么记录?是用0 还是-1?
		//实际上直接和A关联起来的A++就能解决了= =.. 既能代表那个序列,也能记录是否被访问	
		while (1){
		cin >> target[1];
		if (target[1] == 0)break;
		for (int i = 2; i <= n; i++)
			cin >> target[i];

		bool q = true;
		while (b <= n)
		{
			if (a == target[b])//这个就是直接溜出来了 
			{
				a++;//回合数加一,target也加,符合条件了..
				b++;
			}
			//对于一个元素,除了push进去,就是直接溜出来,所以溜出来的话和a相等诶..   a就相当于第几回合(过程 
			else if (!s.empty()&&s.top() == target[b]  )//栈里面有元素->已经有被压进来的了,可以输出了-> 
				//如果栈顶 的元素正好是你想要的那个->【栈如果是空的找top,很可怕。。。。】
			{ 
				s.pop(); b++;//b++就是target 里面又 有了一个符合的,可以继续往回检验了,a 
			}//每个target[b]都会问到
			else if (a <= n)
			{
				s.push(a);
				a++;//对于a  没溜出来,就压进去 
			}
			else
			{
				q = false;
				break;
			}

		}
		if (!q)cout << "No" << endl;
		else cout << "Yes" << endl;
		//cout<<q?"Yes":"No"<<endl;
		}
	}
	return 0;
}//辣鸡代码....自己写的别看了
//可怕 的	一



你的当前访问异常,请进行认证后继续阅读剩余内容。

分享到: