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;
    }
    


  • 相关阅读:
    18款在线代码片段测试工具
    毫秒必争,前端网页性能最佳实践
    如何判断Javascript对象是否存在
    推荐10款免费的在线UI测试工具
    揭开Socket编程的面纱
    使用 jQuery Ajax 在页面滚动时从服务器加载数据
    对Android开发者有益的40条优化建议
    web api+递归树型结构
    asp.net Lodop实现批量打印
    asp.net lodop单个打印
  • 原文地址:https://www.cnblogs.com/FantasticDoubleFish/p/14336516.html
Copyright © 2011-2022 走看看