C : 次小次大值
题目描述
小A:小B你会唱小星星么;
小B:一闪一闪亮晶晶,很简单的了;
小A:那你会找一个数列的最大最小值么?
小B:当然了,很简单了。我还会找次小值次大值呢?
小A:次小次大值?
小B:次小值是比最小值大,除去最小值剩下的数列的最小值。次大值同理。但是如果没有次小值,次小值则为最小值加一,同理如果没有次大值,次大值则最大值减一;
小A:...
输入
输入在第一行给出一个正整数n(0<n<100)。第二行给出n个整数(均属于int)(迷茫的小A提醒你,这是个多实例哟)
输出
输出这个数列的次小值和次大值(中间空格隔开,输出占一行)
样例输入
复制
5
1 2 3 4 5
样例输出
复制
2 4
题意:输入一组数,输出次小值与次大值。如果没有次小值,次小值则为最小值加一,同理如果没有次大值,次大值则最大值减一。
思路:先对其排序,若只有一个数或最大值与最小值相等,则次小值为这个数加1,次大值为这个数减1。
题意:输入一组数,输出次小值与次大值。如果没有次小值,次小值则为最小值加一,同理如果没有次大值,次大值则最大值减一。
思路:先对其排序,若只有一个数或最大值与最小值相等,则次小值为这个数加1,次大值为这个数减1。
程序代码:
#include<stdio.h>
int a[110];
int main()
{
int n,i,j,t,min,max;
while(scanf("%d",&n)!=EOF)
{
for(i=1;i<=n;i++)
scanf("%d",&a[i]);
if(n==1)
printf("%d %d\n",a[1]+1,a[1]-1);
else
{
for(i=1;i<=n-1;i++)
for(j=i+1;j<=n;j++)
{
if(a[i]>a[j])
{
t=a[i];
a[i]=a[j];
a[j]=t;
}
}
min=a[1];
max=a[n];
if(min==max)
printf("%d %d\n",min+1,max-1);
else
{
for(i=1;i<=n;i++)
if(a[i]!=min)
{
min=a[i];
break;
}
for(i=n;i>=1;i--)
if(a[i]!=max)
{
max=a[i];
break;
}
printf("%d %d\n",min,max);
}
}
}
return 0;
}