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