伟大的圣嘉然为了帮助阿伟逃跑,在杰哥们的前进路线上放了一个陷阱,杰哥们会依次掉进去。 现在有n个杰哥从A方向前来,按掉入陷阱的顺序编号为1~n。现在给出一串数,你的任务是判断他们全部走出来后的编号有没有可能是这串数。(例如,出来时5 4 1 2 3是不可能的,但5 4 3 2 1 是可能的。) (注意:为了方便起见,每个杰哥都以一个int值代替,并且由于杰哥体积庞大,陷阱可以完全看成一个栈的结构。有的杰哥可能在后面的杰哥进栈前就已经出栈)。
简而言之:有一个{1,2,3, …,N}的队列依次进栈,问出栈的顺序是否可能是题目给出的数列,如果可能,函数返回1,如果不可能,函数返回0.
注意,数组从1开始读入!`#include <stdio.h>
#include <stdlib.h>
const int N = 100;
int check(int Jie[],int n);
int main()
{
int n; int Jie[N];
scanf("%d",&n);
for(int i=1;i<=n;++i)//注意,数组从1开始读入!
scanf("%d",&Jie[i]);
if(check(Jie,n))
printf(“Yes”);
else
printf(“No”);
}
/* 请在这里填写答案 */`
//任意数A后面比A小的数都是按照降序排列的
int check(int Jie[],int n){
int flag;
if(n <= 0) return 0;
for(int i = 0; i < n; i++){
flag = 1;
int j = i + 1;
int a[n -j -2];
int k = 0;
for(; j < n; j++){
if(Jie[i] > Jie[j])
a[k++] = Jie[j];
}
for(int l = 0; l < k-1; l++){
if(a[l] < a[l+1]){
flag = 0;
break;
}
}
if(flag == 0)
break;
}
if(flag == 1)
return 1;
if(flag == 0)
return 0;
}```