结果错误-关于出栈顺序,结果输出错误

问题描述

关于出栈顺序,结果输出错误

给定入栈顺序为1,2...10
对每个测试输入,输出只有一行:
“Yes”,如果打出顺序满足“栈”的特点;
“No”,如果打出顺序不满足“栈”的特点。
输出一个整数,即所有不同序列的总数目。

例如:
3
1 2 3 4 5 6 7 8 9 10
10 9 8 7 6 5 4 3 2 1
3 1 2 4 5 6 7 8 9 10

Yes
Yes
No

输出结果全部都是NO- - 没有找到哪里有问题,麻烦看出来的大神了~谢谢~

代码:

include
using namespace std;

int main() {
int T;
int n[12];
cin >> T;
while (T--) {
int r = 0,max = 0;
for (int i = 0; i < 10; i++) {
cin >> n[i];
}
for (int i = 0; i < 8; i++) {
if(max < n[i]){
max = n[i];
}
if (r = 1) break;
if (n[i+1] < max){
if (n[i+2] > n[i+1] && n[i+2] < max) {
r = 1;
}
}

  }
if (r = 0) cout << "Yesn";
else cout << "Non";

}
system("pause");
return 0;
}

解决方案

int T;
int n[12];
cin >> T;
while (T--)
{
int r = 0,max = 0;
for (int i = 0; i < 10; i++)
{
cin >> n[i];
}
for (int i = 0; i < 8; i++)
{
if(max < n[i])
{
max = n[i];
}
if (r == 1) break;//这里错了。你写成了r=1
if (n[i+1] < max)
{
if (n[i+2] > n[i+1] && n[i+2] < max)
{
r = 1;
}
}
}
if (r == 0) //这里错了。你写成了r=0
cout << "Yesn";
else
cout << "Non";
}
system("pause");
return 0;
我也是初学者,我觉得至少那两个地方是错了。最后,我自己的观点,写程序的时候海事适当加上点注释比较好,才不会很难懂。

解决方案二:

您的程序中存在如下问题
if (r = 0) //这是赋值,而非条件判断,特别注意
cout << "Yesn";
else cout << "Non";

下面的代码是根据题意重新编写的,基本思路是给定的出栈顺序与原顺序相比,要么下一个出栈的数没有在栈中出现过,要么出现就是在栈顶的位置,如果这两个情况都不满足,则该顺序不可能为正确的出栈顺序。

#include <cstdio>

#include

using namespace std;

int isCorrectOrder(int * arr, int len)
{
int i, j;
int stack[10], cur, index;
for(i = 0, cur = 1, index = 0; i < len; ++ i)
{
if(arr[i] >= cur) //下一个要出栈的数没有在栈中出现过
{
for(j = cur; j < arr[i]; ++ j)
stack[index ++] = j;
cur = arr[i] + 1;
}
else
{
if(stack[index-1] == arr[i]) //下一个出栈的数在栈顶位置
-- index;
else //其他情况则不可能是给定已经顺序的出栈顺序
return -1;
}
}

return 0;

}

int main()
{
int T, ret;
int n[12];
cin >> T;
while (T--)
{
for (int i = 0; i < 10; i++)
cin >> n[i];

    ret = isCorrectOrder(n, 10);

    if (ret == 0) cout << "Yesn";
    else cout << "Non";
}

system("pause");
return 0;

}

望您自己再调试一下!

时间: 2024-09-13 04:10:08

结果错误-关于出栈顺序,结果输出错误的相关文章

N个数依次入栈,出栈顺序有多少种?

对于每一个数来说,必须进栈一次.出栈一次.我们把进栈设为状态'1',出栈设为状态'0'.n个数的所有状态对应n个1和n个0组成的2n位二进制数.由于等待入栈的操作数按照1‥n的顺序排列.入栈的操作数b大于等于出栈的操作数a(a≤b),因此输出序列的总数目=由左而右扫描由n个1和n个0组成的2n位二进制数,1的累计数不小于0的累计数的方案种数. 在2n位二进制数中填入n个1的方案数为C(2n,n),不填1的其余n位自动填0.从中减去不符合要求(由左而右扫描,0的累计数大于1的累计数)的方案数即为所

一个堆栈中先后有1 2 3 4入栈,请问可能的出栈序列?数据结构作业,谢谢

问题描述 一个堆栈中先后有1 2 3 4入栈,请问可能的出栈序列?数据结构作业,谢谢 一个堆栈中先后有1 2 3 4入栈,请问可能的出栈序列?数据结构作业,谢谢 解决方案 14321342132423412431214321343421324132144321 解决方案二: 有个东西叫Catalan数,可以计算出所有出栈情况个数,设入栈序列为I(n):12...n,则I(n)有C(2nn)-C(2nn-1)个出栈序列.具体多少个你可以根据公式自己算,这样不会落下. 解决方案三: 你理解栈先进后出

【数据结构之旅】顺序栈的定义、初始化、空栈判断、入栈、出栈操作

说明:     往前学习数据结构,想运行一个完整的顺序栈的程序都运行不了,因为书上给的都是一部分一部分的算法,并没有提供一个完整可运行的程序,听了实验课,自己折腾了一下,总算可以写一个比较完整的顺序栈操作的小程序,对于栈也慢慢开始有了感觉.下面我会把整个程序拆开来做说明,只要把这些代码放在一个文件中,用编译器就可以直接编译运行了. 一.实现 1.程序功能   关于栈操作的经典程序,首当要提及进制数转换的问题,利用栈的操作,就可以十分快速地完成数的进制转换. 2.预定义.头文件导入和类型别名   

.NET CIL系列第二篇:入栈和出栈——CIL基于栈的本质

在上一篇.NET CIL第一篇:CIL介绍和入门中我们简要介绍了CIL编程的本质,和学习CIL编程的价值.还介绍了CIL的指令.特性和操作码.接下来的文字中会频繁出现:指令.特性.操作码这些关键字.所以请确定你已经知道它们的含义了. 入栈和出栈:CIL基于栈的本质 像C#这样的高级.NET语言,总是试图尽量隐藏底层的实现..NET开发一个不太为人注意的方面就是CIL实际上是一个完全以栈为基础的开发语言.回忆我们熟悉的System.Collections命名空间中的Stack类型的功能,它被用于压

谁能解释下&amp;amp;quot;递归的本质就是用压栈与出栈操作&amp;amp;quot;?

问题描述 谁能解释下"递归的本质就是用压栈与出栈操作"? 递归的本质就是用压栈与出栈操作 这句话感觉很有道理啊 解决方案 当递归调用时每次调用自己时可以看做是压栈过程,当递归条件满足结束时,递归一级一级的返回时可以看做是出栈的过程. 解决方案二: 函数调用的本质就是"压栈与出栈操作",递归不过是它的特例,自身调用自身. 解决方案三: 递归可以简单理解为一个大问题分为小问题,然后小问题继续分解,直到能解决,然后几个小问题解决,就是解决一个大问题,金字塔形状最后解决所有

android中Activity的singletask模式弹出栈的问题

问题描述 android中Activity的singletask模式弹出栈的问题 07-14 17:48:53.218: E/First(8272): onDestroy 07-14 17:48:53.226: E/Second(8272): onDestroy 07-14 17:48:53.226: E/Third(8272): onPause 07-14 17:48:53.250: E/MAIN(8272): onRestart 07-14 17:48:53.250: E/MAIN(8272

新手求助!!!vc6.0 MFC程序编译通过却运行不了,F5输出错误一大堆!!求大神

问题描述 新手求助!!!vc6.0 MFC程序编译通过却运行不了,F5输出错误一大堆!!求大神 Loaded 'ntdll.dll', no matching symbolic information found. Loaded 'C:WindowsSysWOW64kernel32.dll', no matching symbolic information found. Loaded 'C:WindowsSysWOW64KernelBase.dll', no matching symbolic

链式栈的入栈和出栈问题,求各位大神指教

问题描述 入栈:StackNodepush(StackNodeS){S.next=top;top=S;returntop;}出栈:StackNodepop(){StackNodesn=top;top=top.next:returnsn;}其中的top=S和sn=top该怎么理解,虽然知道是指针的指向,但能不能写成S=top和top=sn?求各位大神指教 解决方案 解决方案二:入栈的时候是在头部加入,top就是指向头部的句柄,用当前加入的对象句柄替换原来的top指向的对象句柄.出栈就反过来.看看数

后台-php 用栈 做符号匹配 错误 求分析

问题描述 php 用栈 做符号匹配 错误 求分析 我想用两个数组实现表达式的四则运算 但是不知道为什么 代码有bug 我分析不出原因 求大神指教 解决方案 后台代码如下: 传入的是一个用空格分开的算术表达式例如:1 + 2 * 3 + 2 <?php $result=0; //对result赋值,定义变量. function youxianji($ch1,$ch2) { if($ch2 == '#'||$ch1 == '('||$ch2 == '(') return 0; if(($ch1 ==