伟大的圣嘉然为了帮助阿伟逃跑,在杰哥们的前进路线上放了一个陷阱,杰哥们会依次掉进去。 现在有n个杰哥从A方向前来,按掉入陷阱的顺序编号为1~n。现在给出一串数,你的任务是判断他们全部走出来后的编号有没有可能是这串数。(例如,出来时5 4 1 2 3是不可能的,但5 4 3 2 1 是可能的。) (注意:为了方便起见,每个杰哥都以一个int值代替,并且由于杰哥体积庞大,陷阱可以完全看成一个栈的结构。有的杰哥可能在后面的杰哥进栈前就已经出栈)。
简而言之:有一个{1,2,3, …,N}的队列依次进栈,问出栈的顺序是否可能是题目给出的数列,如果可能,函数返回1,如果不可能,函数返回0.
注意,数组从1开始读入!
`#include#include 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;
}```



