c++:计算中位数

输入数据

第一行为一个整数 t (1t100)t (1≤t≤100),表示数据的组数。接下来对于每组数据

第一行为一个整数 n (1n500)n (1≤n≤500),表示参加考试的人数。

第二行有 nn 个整数 a1,a2,an (0ai100)a1,a2,…an (0≤ai≤100),表示每个人的成绩。

输出数据

对于每组数据,输出一行:

第一行为一个实数,表示这门科目的成绩得分中位数(保留一位小数)。

#include<iostream>
#include<string>
#include<vector>
#include<algorithm>
using namespace std;
const int MAX = 100;


int main() {
		ios::sync_with_stdio(false); cin.tie(0);
		int num,n,newNum; vector<int> a[MAX];
		cin >> num;//输入数据组数
		for (int i = 0; i < num; i++){//第i组数据
			cin >> n;//输入分数的个数
			for (int j = 0; j < n; j++) {
				cin >> newNum;
				a[i].push_back(newNum);//第一次写的时候这里用的a[j].push_back(),怕是蠢到家了。
				if (j + 1 == n)//循环要搞清楚i和j分别代表的意义是什么
					sort(a[i].begin(), a[i].end());//排序
			}
			if (n % 2 == 1) //如果是奇数
				printf("%.1f\n", (float)a[i].at(n / 2));
				/*cout << (float)a[i].at(n / 2)<< endl;*/
				
			else {
//printf函数中不涉及自动转换
				printf("%.1f\n", (float)(a[i].at(n / 2 - 1) + a[i].at(n / 2)) / 2);//后面数据要先转化为float,不然前后格式不对
				/*cout << (float)(a[i].at(n / 2 - 1) + a[i].at(n / 2)) / 2 << endl;*/
				//用cout输出无法保留一位小数
			}
		}
		return 0;
	}
	


猜你喜欢

转载自blog.csdn.net/gulaixiangjuejue/article/details/80102680