题目描述
小A:小B你会唱小星星么;
小B:一闪一闪亮晶晶,很简单的了;
小A:那你会找一个数列的最大最小值么? 小B:当然了,很简单了。我还会找次小值次大值呢? 小A:次小次大值? 小B:次小值是比最小值大,除去最小值剩下的数列的最小值。次大值同理。但是如果没有次小值,次小值则为最小值加一,同理如果没有次大值,次大值则最大值减一; 小A:...
输入
输入在第一行给出一个正整数n(0<n<100)。第二行给出n个整数(均属于int)(迷茫的小A提醒你,这是个多实例哟)
输出
输出这个数列的次小值和次大值(中间空格隔开,输出占一行)
样例输入
5 1 2 3 4 5
样例输出
2 4
解题思路:
大致看一下,是个水题,然后开始写,结果wa。有几点没有考虑到,如果有3个数 3 3 3 输出的应该是4 2,而不是3 3。要找出看是否有重复的,有重复的要跳过,找到一个比自己大的,或者比自己小的。
代码:
# include <stdio.h>
# include <string.h>
# include <algorithm>
using namespace std;
int main (void)
{
int t, i, a[101], c, c1;
while (~ scanf("%d", &t))
{
for (i = 0; i < t; i ++)
scanf("%d", &a[i]);
if (t == 1)
printf("%d %d\n", a[0]+1, a[0]-1); //只有一个数
else
{
sort(a, a+t); //从小到大排序
c = 0;
for (i = 1; i < t; i ++)
{
if (a[i] > a[0])
{
c = i;
break;
}
} // 找出比最小值大的数
if (c != 0)
{
c1 = -1; // 这里不能定义为0,可能a【0】为比最大值小的那个数
printf("%d ", a[c]);
for (i = t-2; t >= 0; i --) // 找出比最大值小的数
{
if (a[i] < a[t-1])
{
c1 = i;
break;
}
}
if (c1 != -1)
printf("%d\n", a[c1]);
}
else // c == 0 说明所有的数都一样。
printf("%d %d\n", a[0]+1, a[0]-1);
}
}
return 0;
}