判断出栈序列合法性(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"); 	
	}
}

在这里插入图片描述

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


如果这篇文章对你帮助很大,麻烦帮忙,点下友情链接: 鱼儿项目网(直接点这里),进去之后切换几个页面,停留几十秒。感激不尽。本站采集全网自媒体,网赚类,电商营销课程。里面有一些免费项目大家也可以看看

  • 15
    点赞
  • 41
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

m明月Java3

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值