1068 - 出栈合法性
时间限制 : 1 秒
内存限制 : 32 MB
已知自然数1,2,...,N(1<=N<=100)依次入栈,请问序列C1,C2,...,CN是否为合法的出栈序列。
题目输入
输入包含多组测试数据。
每组测试数据的第一行为整数N(1<=N<=100),当N=0时,输入结束。
第二行为N个正整数,以空格隔开,为出栈序列。
题目输出
对于每组输入,输出结果为一行字符串。
如给出的序列是合法的出栈序列,则输出Yes,否则输出No。
输入/输出样例
输入格式
5 3 4 2 1 5 5 3 5 1 4 2 0
输出格式
Yes No
C语言解答
#include <stdio.h> void main() { int i,a[100],k,count,key,n,j,b[100]; scanf("%d",&n); while(n!=0) { k=key=0; for(i=0;i<n;i++) scanf("%d",&a[i]); for(i=0;i<n;i++) { count=0; for(j=i+1;j<n;j++) { if(a[j]<a[i]) {b[count]=a[j]; count++;} } for(k=0;k<count-1;k++) { if(b[k]<b[k+1]) key=1; } } if(key==0) printf("Yes\n"); else printf("No\n"); scanf("%d",&n); } }
C++解答
#include <stdio.h> int top; int Stack(int stack[], int a, int &pre) { if (a <= pre) { if (stack[--top] != a) { //printf("%d %d\n", stack[top],a); return 0; } else return 1; } for (int i = pre + 1; i <= a; i++) { stack[top++] = i; } top--; pre = a; return 1; } int main(int argc, char *argv[]) { int n; int a, stack[105]; while (scanf("%d", &n) != EOF) { if(n==0) break; top = 1; stack[0]=0; int pre = 0; int flag = 1; for (int i = 0; i < n; i++) { scanf("%d", &a); if (flag == 1) { flag = Stack(stack, a, pre); /*for (int j=1; j<top; j++ ) { printf("%d ",stack[j]); } printf("\n");*/ } } if (flag == 1) { printf("Yes\n"); }else printf("No\n"); } return 0; }
Java解答
import java.util.Scanner; import java.util.Stack; public class Main { public static void main(String[] args) { int n = 0; Scanner in = new Scanner(System.in); while ((n = in.nextInt()) != 0) { int a[] = new int[100]; for (int i = 0; i < n; i++) a[i] = in.nextInt(); Stack s = new Stack(); int index = 0; for (int i = 1; i <= n; i++) { s.add(i); while(!s.isEmpty()){ if (Integer.parseInt(s.lastElement().toString()) == a[index]) { index++; s.pop(); }else break; } } if (s.isEmpty()) System.out.println("Yes"); else System.out.println("No"); } } }
Python解答
import sys def stackQue(n,ls): if len(ls)!=n: return False i=0 while i<len(ls): tmpl=[c for c in ls[i:] if ls[i]>c] if not isSort(tmpl): return False i+=1 return True def isSort(ls,reverse=False): if not reverse: i=0 while i<len(ls)-1: if ls[i]<ls[i+1]: return False i+=1 return True i = 0 for line in sys.stdin: a = line.split() n = len(a) ls = map(lambda x:int(x),a) if n == 1 and ls[0]==1: i +=1 if i%2 == 0: print 'Yes' if 1< n <= 100: re = stackQue(n,ls) if re is True: print 'Yes' else: print 'No'