CSP201612-1:中间数
2018-06-17 21:13:02来源:未知 阅读 ()
引言:CSP(http://www.cspro.org/lead/application/ccf/login.jsp)是由中国计算机学会(CCF)发起的"计算机职业资格认证"考试,针对计算机软件开发、软件测试、信息管理等领域的专业人士进行能力认证。认证对象是从事或将要从事IT领域专业技术与技术管理人员,以及高校招考研究生的复试对象。
-
问题描述
在一个整数序列a1, a2, …, an中,如果存在某个数,大于它的整数数量等于小于它的整数数量,则称其为中间数。在一个序列中,可能存在多个下标不相同的中间数,这些中间数的值是相同的。
给定一个整数序列,请找出这个整数序列的中间数的值。
-
输入格式
输入的第一行包含了一个整数n,表示整数序列中数的个数。
第二行包含n个正整数,依次表示a1, a2, …, an。
-
输出格式
如果约定序列的中间数存在,则输出中间数的值,否则输出-1表示不存在中间数。
-
样例输入
6
2 6 5 6 3 5
-
样例输出
5
-
样例说明
比5小的数有2个,比5大的数也有2个。
-
样例输入
4
3 4 6 7
-
样例输出
-1
-
样例说明
在序列中的4个数都不满足中间数的定义。
-
样例输入
5
3 4 6 6 7
-
样例输出
-1
-
样例说明
在序列中的5个数都不满足中间数的定义。
-
评测用例规模与约定
对于所有评测用例,1 ≤ n ≤ 1000,1 ≤ ai ≤ 1000。
-
思路说明
首先利用sort()函数对输入的n个数字进行升序排列,这样所有值相同的数都会相邻。然后通过循环可以找到一组重复的数的起点i,终点j,只要i之前的数的个数等于j之后的数的个数,则说明这一组重复的数就是我们要找的中间数。
-
源代码
# include <stdio.h> # include <stdlib.h> # include <memory.h> # include <algorithm>
using namespace std;
bool compare(int a, int b) { return a < b; }
int main(void) { int n; //个数 int sign = 1; scanf("%d", &n); int *input = (int *)malloc(sizeof(int) * n); memset(input, 0, sizeof(int) * n); for (int i = 0; i < n; i++) { scanf("%d", input+i); }
sort(input, input+n, compare); //升序排列
int i, j; for (i = 0; i < n; ) { for (j = i; j < n; j++) { if (input[i] != input[j]) { break; } } if (i == n - j) //大于input[i]数的个数 = 小于input[i]数的个数 { printf("%d\n", input[i]); sign = 0; } i = j; } if (sign) { printf("%d\n", -1); }
return 0; } |
标签:
版权申明:本站文章部分自网络,如有侵权,请联系:west999com@outlook.com
特别注意:本站所有转载文章言论不代表本站观点,本站所提供的摄影照片,插画,设计作品,如需使用,请与原作者联系,版权归原作者所有
下一篇:洛谷P4136 谁能赢呢?
- 关于各种不同开发语言之间数据加密方法(DES,RSA等)的互通的 2020-06-07
- 串口通讯中的字符串连接问题。 2018-12-04
- CSP201403-3:命令行选项 2018-09-10
- CSP201612-2:工资计算 2018-09-05
- CSP201604-2:俄罗斯方块 2018-09-01
IDC资讯: 主机资讯 注册资讯 托管资讯 vps资讯 网站建设
网站运营: 建站经验 策划盈利 搜索优化 网站推广 免费资源
网络编程: Asp.Net编程 Asp编程 Php编程 Xml编程 Access Mssql Mysql 其它
服务器技术: Web服务器 Ftp服务器 Mail服务器 Dns服务器 安全防护
软件技巧: 其它软件 Word Excel Powerpoint Ghost Vista QQ空间 QQ FlashGet 迅雷
网页制作: FrontPages Dreamweaver Javascript css photoshop fireworks Flash