一、题干
/*
一、求中位数的位置
先输入一个整型数字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; } }