ZZNU 次小次大值(有坑点不能简单地排序一下,直接查靠谱)

Posted 0一叶0知秋0

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了ZZNU 次小次大值(有坑点不能简单地排序一下,直接查靠谱)相关的知识,希望对你有一定的参考价值。

C : 次小次大值

 
Progress Bar

时间限制:0 Sec 内存限制:0 MiB
提交:782 答案正确:166

 

 


题目描述

小A:小B你会唱小星星么;

小B:一闪一闪亮晶晶,很简单的了;

小A:那你会找一个数列的最大最小值么?
小B:当然了,很简单了。我还会找次小值次大值呢?
小A:次小次大值?
小B:次小值是比最小值大,除去最小值剩下的数列的最小值。次大值同理。但是如果没有次小值,次小值则为最小值加一,同理如果没有次大值,次大值则最大值减一;
小A:...

输入

输入在第一行给出一个正整数n(0<n<100)。第二行给出n个整数(均属于int)(迷茫的小A提醒你,这是个多实例哟)

输出

输出这个数列的次小值和次大值(中间空格隔开,输出占一行)

样例输入

复制
5
1 2 3 4 5

样例输出

复制
2 4
#include <stdio.h>
#include <string.h>
#include <math.h>
#define inf 0x3f3f3f3f

// 次小次大值不能和最小最大值相等
int main()
{
    int n,Fmax,Fmin,Smax,Smin,x;
    while(~scanf("%d",&n))
    {
        Fmax=Smax=-inf;
        Fmin=Smin=inf;
        while(n--)
        { 
            scanf("%d",&x);
            if(x>Fmax)
            {
                Smax=Fmax;
                Fmax=x;
            }
            else if(x>Smax&&x!=Fmax)
            {
                Smax=x;
            }
            if(x<Fmin)
            {
                Smin=Fmin;
                Fmin=x;
            }
            else if(x<Smin&&x!=Fmin)
            {
                Smin=x;
            }
        }
        printf("%d %d\n",Smin!=inf ? Smin : Fmin+1,Smax!=-inf ? Smax : Fmax-1);
    }
    return 0;
}

 

以上是关于ZZNU 次小次大值(有坑点不能简单地排序一下,直接查靠谱)的主要内容,如果未能解决你的问题,请参考以下文章

常见的4种排序算法

十一联考 1T2 树链剖分

洛谷.4180.[模板]次小生成树Tree(Kruskal LCA 倍增)

洛谷.4180.[模板]次小生成树Tree(Kruskal LCA 倍增)

2020-05-26 — 习题训练三

2020-05-26 — 习题训练三