原题:
第二小整数 |
Time Limit: 3000/1000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others) |
Total Submission(s): 834 Accepted Submission(s): 554 |
Problem Description
求n个整数中倒数第二小的数。
每一个整数都独立看成一个数,比如,有三个数分别是1,1,3,那么,第二小的数就是1。 |
Input
输入包含多组测试数据。
输入的第一行是一个整数C,表示有C测试数据; 每组测试数据的第一行是一个整数n,表示本组测试数据有n个整数(2<=n<=10),接着一行是 n个整数 (每个数均小于100); |
Output
请为每组测试数据输出第二小的整数,每组输出占一行。
|
Sample Input
2 2 1 2 3 1 1 3 |
Sample Output
2 1 |
这题是水题,主要是其他人的解法让我受教了~
先贴自己的代码,就是自己按照思路排序:
#include<iostream>
using namespace std;
int main ()
{
int a[100];
int t , n;
cin>>t;
while( t-- )
{
cin>>n ;
for( int i=0; i< n ; i++ )
cin>>a[i];
sort( a , a+n );
cout<<a[1]<<endl;
}
system("pause");
return 0;
}
然后是个用优先队列的:我就学习个优先队列
#include<stdio.h>
#include<math.h>
#include <queue>
#include<algorithm>
#include <iostream>
using namespace std;
int main()
{
int t;
cin>>t;
while (t--)
{
priority_queue < int >q;
int n;
cin>>n;
while(n--)
{
int num;
scanf("%d",&num);
if(q.empty())q.push(num);
else
{
if(q.size()<2)q.push(num);
else
{
if(num<q.top())
{
q.push(num);
q.pop();
}
}
}
}
printf("%d\n",q.top());
}
return 0;
}
最后还有个用排序算法的:
#include<iostream>
using namespace std;
int main ()
{
int a[100];
int t , n;
cin>>t;
while( t-- )
{
cin>>n ;
for( int i=0; i< n ; i++ )
cin>>a[i];
sort( a , a+n );
cout<<a[1]<<endl;
}
return 0;
}