zoukankan      html  css  js  c++  java
  • C语言编程练习37:出栈合法性

    题目描述

    已知自然数1,2,...,N(1<=N<=100)依次入栈,请问序列C1,C2,...,CN是否为合法的出栈序列。

    输入

    输入包含多组测试数据。
    每组测试数据的第一行为整数N(1<=N<=100),当N=0时,输入结束。
    第二行为N个正整数,以空格隔开,为出栈序列。

    输出

    对于每组输入,输出结果为一行字符串。
    如给出的序列是合法的出栈序列,则输出Yes,否则输出No。

    样例输入 Copy

    5
    3 4 2 1 5
    5
    3 5 1 4 2
    0

    样例输出 Copy

    Yes
    No

    思路:若初始序列为升序序列,合法的出栈序列满足,在出栈序列中,任选一个元素i,i右边所有小于i的元素必须是逆序,就是降序排列。

      eg:321987654

                3后面小于3的元素1和2,为降序排列,9后面小于9的元素也是降序排列,合法!

      eg : 987651234

                 可快速判断出,9后面的元素1234并没有降序排列,故不合法!

      同理,若初始序列为降序序列,合法的出栈序列满足,在出栈序列中,任选一个元素i,i右边所有大于i的元素必须是顺序,就是升序排列。

    #include <iostream>
    #include <stack>
    
    using namespace std;
    
    int main()
    {
        int n;
        while(cin >> n,n!=0)
        {
            int *a = (int *)malloc(sizeof(int)*n);
            int b[100];
            int flag=1;
            for(int i=0;i<n;i++)
            {
                cin >> a[i];
            }
            for(int i=0;i<n-1;i++)
            {
                int c=0;
                for(int j=i+1;j<n;j++)
                {
                    if(a[i]>a[j])
                    {
                        b[c++]=a[j];
                    }
                }
                for(int k=0;k<c-1;k++)
                {
                    if(b[k]<b[k+1])
                    {
                        cout << "No" <<endl;
                        flag=0;
                        break;
                    }
                }
                if(!flag)
                {
                    break;
                }
               
            }
            if(flag)
            {
                cout << "Yes" <<endl;
            }
        }
        return 0;
    }
    


  • 相关阅读:
    javascript往textarea追加内容
    Java之Comparable接口和Comparator接口
    Java之iterator迭代器和iterable接口
    Java之hashSet实现引用类型的禁止重复功能
    Java之获取系统属性
    Java之String,StringBuffer,StringBuilder类
    Java之sleep和wait的区别
    Android开发之ADT中无Annotation Processin的解决办法
    Android开发之注解式框架ButterKnife在ADT中的设置
    Android开发UI之Action Bar
  • 原文地址:https://www.cnblogs.com/FantasticDoubleFish/p/14336516.html
Copyright © 2011-2022 走看看