问题描述:
试题编号: | 201612-1 |
试题名称: | 中间数 |
时间限制: | 1.0s |
内存限制: | 256.0MB |
问题描述: |
问题描述 在一个整数序列a1, a2, …, an中,如果存在某个数,大于它的整数数量等于小于它的整数数量,则称其为中间数。在一个序列中,可能存在多个下标不相同的中间数,这些中间数的值是相同的。 输入格式 输入的第一行包含了一个整数n,表示整数序列中数的个数。 输出格式 如果约定序列的中间数存在,则输出中间数的值,否则输出-1表示不存在中间数。 样例输入 6 样例输出 5 样例说明 比5小的数有2个,比5大的数也有2个。 样例输入 4 样例输出 -1 样例说明 在序列中的4个数都不满足中间数的定义。 样例输入 5 样例输出 -1 样例说明 在序列中的5个数都不满足中间数的定义。 评测用例规模与约定 对于所有评测用例,1 ≤ n ≤ 1000,1 ≤ ai ≤ 1000。 |
AC代码:
1 #include<iostream> 2 #include<algorithm> 3 #include<string> 4 #include<iomanip> 5 #include<vector> 6 #include<cmath> 7 #include<stack> 8 using namespace std; 9 struct node 10 { 11 int val;//保存值 12 int isnmed;//is not mediant,最后为0时说明为中间数 13 node(){val=0;isnmed=0;} 14 }num[1001]; 15 int main() 16 { 17 int n; 18 cin>>n; 19 for(int i=1;i<=n;i++) cin>>num[i].val; 20 for(int i=1;i<=n;i++) 21 { 22 for(int j=1;j<=n;j++) 23 { 24 if(j==i) continue; 25 if(num[j].val>num[i].val) num[i].isnmed++; 26 else if(num[j].val<num[i].val) num[i].isnmed--; 27 } 28 if(!num[i].isnmed) 29 { 30 cout<<num[i].val;break; 31 } 32 if(i==n) cout<<"-1"; 33 } 34 } 35