谁是老二?
作者: Turbo时间限制: 1S章节: 一维数组
问题描述 :
一维数组中存储不超过100个整型数据,请找出其中第二大的元素,输出这些元素的值以及它们的下标。
注意,由于元素值可能相同,因此具有最大值的元素个数可能不只一个,第二大的元素是比它们小的那些元素。
输入说明 :
用户可输入多组数据,每组数据由两行组成:
第一行:数组元素的个数n
第二行:n个数组元素,由空格分隔
输出说明 :
对于每组输入,输出一行,包含第二大的元素的值以及它们的下标(都是整数),整数之间以空格分隔。如果有多个下标,则下标按从小到大的顺序输出。每行的开头与结尾无多余空格。
每组输出占一行。
如果不存在第二大的元素,则输出"none"(不包含引号)
输入范例 :
3
2 5 4
10
1 3 5 2 4 3 7 5 7 7
5
2 2 2 2 2
输出范例 :
4 2
5 2 7
none
思路:
使用STL中的set的容器,set自带排序功能。
AC代码
#include <iostream>
#include <set>
#include <algorithm>
using namespace std;
int main()
{
set<int> s;
int num[200];
int n,x,tmp;
while(cin>>n){
s.clear();
for(int i=0;i<n;i++){
cin>>tmp;
num[i]=tmp;
s.insert(tmp);
}
if(s.size()<2){
cout<<"none"<<endl;
}else{
set<int>::iterator it;
it = s.end();
it--;
s.erase(it);
it = s.end();
it--;//*s.end()返回的是集合元素的总数
cout<<*it;
x=*it;
for(int i=0;i<n;i++){
if(num[i]==x){
cout<<' '<<i;
}
}
cout<<endl;
}
}
return 0;
}