就是求一个百分位数,主要是没想到需要第一次将所有数据存起来,以后需要注意。。。只要是数据小的,都要考虑这个问题,既省时,有容易对。
#include<iostream>
#include<algorithm>
#include <stdio.h>
using namespace std;
const int MAX=1000050;
double price[MAX];
double percentile[105];
int main(){
int N;
int Q;
int i;
bool flag=0;
int T;
scanf("%d",&T);
while(T--){
scanf("%d",&N);
price[0]=0;
if(flag){
printf("\n");
}
for(i=1;i<=N;i++){
scanf("%lf",&price[i]);
}
sort(price+1,price+1+N);
for(i=1;i<=99;i++){
int tmp=N*i/100;
if(N*i%100){
percentile[i]=price[tmp+1];
}else{
double mid=(price[tmp]+price[tmp+1])/2.0;
percentile[i]=mid;
}
}
printf("%.2lf %.2lf %.2lf %.2lf %.2lf\n",price[1],percentile[25],percentile[50],percentile[75],price[N]);
scanf("%d",&Q);
while(Q--){
int p;
scanf("%d",&p);
printf("%.2lf\n",percentile[p]);
}
flag=1;
}
return 0;
}