一、题干
/*
一、求中位数的位置
先输入一个整型数字N,接着输入n个无序的数字。要求输出升序排列后的中位数,以及该中位数输入的次序。
如果N为偶数,则输出有两个中位数;如果N为奇数,输出最中间的数字即可。
Example1:
Input: 5
9 2 7 1 6
Output:
6 5
Example2:
Input:6
9 6 7 1 2 3
Output:
3 6
6 2
*/
二、代码
1.方法一:用动态数组,qsort
#include <iostream> //#include <cstdlib>//或<stdlib.h>都行 using namespace std; struct Node{ int inSeq; int value; }; int cmp(const void *a,const void *b){ return (*(Node*)a).value -(*(Node*)b).value;//升序 } void main(){ freopen("G:/17_1.txt","r",stdin); int n; cin>>n; Node *a=new Node[n]; for(int i=0;i<n;i++){ a[i].inSeq=i+1; cin>>a[i].value; } qsort(a,n,sizeof(Node),cmp); if(n%2==0){ cout<<a[n/2-1].value<<" "<<a[n/2].value<<"\n"; cout<<a[n/2-1].inSeq<<" "<<a[n/2].inSeq<<"\n"; }else{ cout<<a[n/2].value<<" "<<a[n/2].inSeq<<endl; } delete[] a; }
2.方法二:用vector,sort
#include <iostream> #include <vector> #include <algorithm> using namespace std; struct Node{ int inSeq; int value; }; bool cmp1(Node a,Node b){ return a.value < b.value;//升序 } void main(){ freopen("G:/17_1.txt","r",stdin); int n; cin>>n; vector<Node> arr(n); for(int i=0;i<n;i++){ arr[i].inSeq=i+1; cin>>arr[i].value; } sort(arr.begin(),arr.end(),cmp1); if(n%2==0){ cout<<arr[n/2-1].value<<" "<<arr[n/2].value<<"\n"; cout<<arr[n/2-1].inSeq<<" "<<arr[n/2].inSeq<<"\n"; }else{ cout<<arr[n/2].value<<" "<<arr[n/2].inSeq<<endl; } }
作者:西伯尔
出处:http://www.cnblogs.com/sybil-hxl/
本文版权归作者和博客园共有,欢迎转载,但未经作者同意必须保留此段声明,且在文章页面明显位置给出原文连接,否则保留追究法律责任的权利。
浙公网安备 33010602011771号