王小二的求值问题

王小二的求值问题

1437: 王小二的求值问题

时间限制: 1 Sec 内存限制: 128 MB

提交: 141 解决: 31 统计

题目描述

题意超级简单,求一个序列的次大值。

输入

多组输入,每个测试实例占两行,包括一个整数n (1<n<1000000),接下来一行是n个int范围内的整数,求次大值;

输出

对于每个测试实例,输出序列的次大值,每个输出占一行。

样例输入

5
1 2 3 4 5

样例输出

4

方法一:冒泡排序。因为是求次大值,所以不需要排除所有数的大小,否则会超时。

方法二:用两个变量记录最大值和次大值。

注意!!!!!是多组输入 

方法一AC代码:

#include<bits/stdc++.h>
using namespace std;
const int maxn=1e6+10;
int a[maxn];
int main()
{
int n,i,j;
while(cin>>n&&n!=EOF)
{
for(i=0;i<n;i++) cin>>a[i];
for(i=0;i<3;i++)
for(j=0;j<n-i-1;j++)
{
if(a[j]>a[j+1])
{
int t=a[j+1];
a[j+1]=a[j];
a[j]=t;
}
}
cout<<a[n-2]<<endl;
}
return 0;
}

方法二AC代码:

#include<bits/stdc++.h>
using namespace std;
int a[1000000+10];
int main()
{
int n,max1,max2;
while(cin>>n&&n!=EOF)
{
for(int i=0;i<n;i++) cin>>a[i];
max1=a[0];
max2=INT_MIN;
for(int i=1;i<n;i++)
{
if(max1<a[i])
{
int t=a[i];
a[i]=max1;
max1=t;
if(max2<a[i]) max2=a[i];
}
else if(max1>=a[i])
{
if(max2<a[i]) max2=a[i];
}
}
cout<<max2<<endl;
} return 0;
}

方法三AC代码(sort):

#include<bits/stdc++.h>
using namespace std;
const int maxn=1e6+10;
int a[maxn];
bool cmp(int a,int b)
{
return a>b;
}
int main()
{
int n,i;
while(~scanf("%d",&n))
{
for(i=0;i<n;i++) scanf("%d",&a[i]);
sort(a,a+n,cmp);
printf("%d\n",a[1]);
}
return 0;
}
05-08 08:06