地址:http://10.105.242.80/problem/p/88/
88. 最值问题
时间限制 1000 ms 内存限制 65536 KB
题目描述
给出N个数,求出这N个数中最大值和次大值。注意这里的次大值必须严格小于最大值。输入保证N个数中至少存在两个不同的数。
输入格式
第一行为测试数据的组数T(T≤20)。请注意,任意两组测试数据之间是相互独立的。
每组数据包括两行:
第一行为一个整数N(1≤N≤1000)。
第二行为N个正整数,每个整数均不大于106。
输出格式
每组数据输出两个数,即N个数的最大值和次大值,中间用空格隔开。
输入样例
2
5
1 2 3 4 5
4
2 2 2 3
输出样例
5 4
3 2
【分析】
最值问题,肯定是要排序的,内部排序里面,快排还是可以的。但也受输入的基本序列的影响。可以排序时剔除相同元素,也可以排完后输出时进行控制。一般的排序题我都用STL的。这里使用set。
代码:
/*
88. 最值问题
时间限制 1000 ms 内存限制 65536 KB
题目描述
给出N个数,求出这N个数中最大值和次大值。注意这里的次大值必须严格小于最大值。输入保证N个数中至少存在两个不同的数。
输入格式
第一行为测试数据的组数T(T≤20)。请注意,任意两组测试数据之间是相互独立的。
每组数据包括两行:
第一行为一个整数N(1≤N≤1000)。
第二行为N个正整数,每个整数均不大于106。
输出格式
每组数据输出两个数,即N个数的最大值和次大值,中间用空格隔开。
输入样例
2
5
1 2 3 4 5
4
2 2 2 3
输出样例
5 4
3 2
*/
/*
Project:
Date: 2019/02/
Author: Frank Yu
*/
#include<cstdio>
#include<cstdlib>
#include<cstring>
#include<cmath>
#include<string>
#include<set>
#include<list>
#include<vector>
#include<map>
#include<iterator>
#include<algorithm>
#include<iostream>
using namespace std;
set<int>::reverse_iterator rit;//反序迭代器
//主函数
int main()
{
int T;
int i;
int N,num;
cin>>T;
while(T--)
{
set<int> s;//集合
scanf("%d",&N);
while(N--)
{
scanf("%d",&num);
s.insert(num);
}
i=2;
for(rit=s.rbegin();rit!=s.rend();rit++)
{
cout<<*rit;
i--;
if(i==1)cout<<" ";//每组输出一个空格即可
if(i==0)break;
}
cout<<endl;
}
return 0;
}
有问题请下方评论,转载请注明出处,并附有原文链接,谢谢!如有侵权,请及时联系。
更多c++STL的使用:C++ STL的使用