0
点赞
收藏
分享

微信扫一扫

判断出栈序列合法性(c语言)


判断出栈序列合法性

  • ​​描述​​
  • ​​格式​​
  • ​​样例​​
  • ​​题解及注释​​

描述

有1、2、3、4、5、6、7这7个数字依次全部入栈后再出栈,在入栈的过程中栈中的数据也可以随时出栈,一直到整个栈为空。将出栈得到的数字依次排列,就可以得到一个“合法”的序列;对应的,有些形式的排列是无论如何调整入栈和出栈顺序也无法得到的,被称为“非法”序列。

比如:“1 2 3 4 6 7 5” 和“1 2 5 6 4 3 7”都是合法的序列,而“1 2 5 7 3 4 6”和“1 2 6 3 4 5 7”以及“1 2 6 3 5 4 7”都是非法的序列。

请编写程序,判断给定的由7个数字组成的序列是合法的还是非法的,如果是合法的输出“Y”,否则输出“N”。

格式

输入格式
第1行是一个整数n,表示要判断的序列的数目。
从第2行到第n+1行,每行一个序列,由1~7组成

输出格式
输出为一行,一个由“Y”和“N”组成的长度为n的字符串,中间不要空格

样例

输入样例
5
1 2 6 3 5 7 4
1 2 6 5 3 7 4
1 2 7 4 5 6 3
1 2 7 6 3 4 5
1 3 2 4 5 7 6
输出样例
NNNNY

题解及注释

数据集保证输入的是1~7个不同的数字组成的长度为7的序列。请注意输出的字母均为大写。n≤100。

#include <stdio.h>
#include <stdlib.h>
#define maxn 1000
int stack[maxn];
int out[maxn];//全局变量,所有函数都可以使用

int check(int n)
{
int po=0,top=0;
for(int i=1;i<=n;i++)//循环七轮
{
for(int j=po+1;j<=out[i];j++)//这里不好描述啊。这样,你把样例的第五个给带进去实验一下。
{
po=j;
stack[top++]=j;//入栈
}
if(stack[--top]!=out[i])//出栈。与out比较
return 0;
}
return 1;
}
int main()
{

int n=7,k;
scanf("%d",&k);
while(k--)
{
for(int i=1;i<=n;i++)//遍历输入
{
scanf("%d",&out[i]);
}
if(check(n))//函数返回1,则输出Y
printf("Y");
else//返回其他值,输出N
printf("N");
}
}

判断出栈序列合法性(c语言)_c语言

写于2021年7月21日19:42分。


举报

相关推荐

0 条评论