输入数据
第一行为一个整数 t (1≤t≤100)t (1≤t≤100),表示数据的组数。接下来对于每组数据:
第一行为一个整数 n (1≤n≤500)n (1≤n≤500),表示参加考试的人数。
第二行有 nn 个整数 a1,a2,…an (0≤ai≤100)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;
}