C : 次小次大值

题目描述

 
 
小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;
}

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值