HPU 1437: 王小二的求值问题

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;
} 
posted @ 2018-03-19 17:18  友人-A  阅读(157)  评论(0编辑  收藏  举报