本文共 1199 字,大约阅读时间需要 3 分钟。
下面代码初始化好像是错的
//辣鸡代码....自己写的别看了//可怕 的 一点:不要根据数据找规律.....//而是要模拟代码的实现过程.. 比如这个是入栈的过程,不妨让计算机跑一次!!!而不是我第一遍代码发现变小就是压进去,变小就 是移出来 //这样实现起来也特别麻烦..又比如说上午那个1/2 ,用枚举是访问遍历每个x,而不是找找什么规律谁比谁大//↑效率就低了而且拔毛什么的 又要特判了吧 //尤其是你自己又是n+1又是什么的就该觉得要换方向了 #include#include using namespace std;int target[1005];int main(){ int n; while (cin >> n&&n != 0){ stack 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< <
苏宁有毛病吧- -...心态炸了
不写了
转载地址:http://omuti.baihongyu.com/