17_1

一、题干

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

猜你喜欢

转载自www.cnblogs.com/sybil-hxl/p/10468498.html