最大元素
您有一个空序列,您将获得N个查询。每个查询都是以下三种类型之一:
1 x - 将元素x推入堆栈。
2 - 删除堆栈顶部的元素。
3 - 打印堆栈中的最大元素。
输入格式
第一行输入包含一个整数N.接下来的N行包含上述查询。 (保证每个查询都有效。)
约束
1≤N≤105
1≤x≤109
1≤type≤3
输出格式
对于每个类型3查询,在新行上打印堆栈中的最大元素。
示例输入
10
1 97
2
1 20
2
1 26
1 20
2
3
1 91
3
示例输出
26
91
我的代码是:
#include<stdio.h>
#include<stdlib.h>
#define MAX_SIZE 100000
long a[MAX_SIZE];
int top = -1;
int Push(long x){
if(top == MAX_SIZE-1){
}
top++;
a[top] = x;
return 0;
}
int Pop(){
if(top == -1){
}
top--;
return 0;
}
int Print(){
int i;
for(i=0;i<top+1;i++){
printf("%ld\n",a[i]);
}
return 0;
}
int main(){
long i, x;
int n, t;
scanf("%d",&t);
for(i=0;i<t;i++){
scanf("%d",&n);
switch(n){
case 1 :
scanf("%ld",&x);
Push(x);
break;
case 2 :
Pop();
break;
case 3 :
Print();
break;
}
}
}
我的输出是: 很好的尝试,但你没有通过这个测试用例。 输入(stdin)
10个
1 97
2
1 20
2
1 26
1 20
2
3
1 91
3
你的输出(标准输出)
26个
26个
91个
预期产出
26个
91个
编译器消息
错误答案
答案 0 :(得分:0)
请求是:
&#34;对于每个类型3查询,在新行上打印堆栈中的最大元素。&#34;
你的代码所做的就是打印所有的堆栈元素
顺便说一句。 if
和Push
中的空Pop
语句正文是什么?
答案 1 :(得分:0)
发布代码的主要问题是Print()
函数正在打印所有内容,而不是遵循它应该只打印当前堆栈上的最大值的约束。
给出已发布的代码,并稍微清理一下并修复Print()
函数并使用有意义的变量名称并使用垂直和水平间距以获得可读性,结果如下:
#include <stdio.h>
#include <stdlib.h>
#define MAX_STACK_SIZE (105)
// prototypes
void Print( void );
void Pop( void );
void Push( int value );
int stack[ MAX_STACK_SIZE ];
int stackIndex = -1;
enum action {pushValue=1, popValue=2, printMax=3};
int main( void )
{
int value;
int numEntries;
enum action myAction;
// get number of entries range 1...105
scanf("%d",&numEntries);
for( int i=0; i<numEntries; i++ )
{
// get action range 1...3
scanf("%d", (int*)&myAction);
switch( myAction )
{
case pushValue :
// get value range 1...109
scanf("%d",&value);
Push( value );
break;
case popValue :
Pop();
break;
case printMax :
Print();
break;
} // end switch
} // end for
return 0;
} // end function: main
void Push(int value)
{
stackIndex++;
stack[stackIndex] = value;
}
void Pop()
{
if( 0 <= stackIndex)
{ // then stack not empty
stackIndex--;
}
}
void Print()
{
int maxValue = -1;
int i;
for( i = 0; i<= stackIndex; i++ )
{
if( stack[i] > maxValue )
{
maxValue = stack[i];
}
}
if( -1 != maxValue )
{
printf("%d\n", maxValue);
}
}
给定已发布的输入,有一个输出。
26
91