#include <iostream> #include <iomanip> // 用于设置小数输出精度 #include <cmath> // 用于 pow() 函数 using namespace std; int main() { int T; cin>>T; int num1[100]; double num2[100]; for (int i=0; i<T; i++) { int n; cin>>n; int* a = new int[n]; // 动态分配数组,防止爆栈,10的9次方wok int max_n=-1e9;// 初始最大值设为最小可能 int min_n=1e9; long long sum = 0; // 用 long long 防止溢出 for(int j=0;j<n;j++){ cin>>a[j]; if (max_n<a[j]) max_n=a[j]; if (min_n>a[j]) min_n=a[j]; sum+=a[j]; } int res1=max_n-min_n; double avg=(double)sum/n;//均值 // 计算方差 double res2 = 0; for (int i = 0; i < n; i++) { res2 += (a[i] - avg) * (a[i] - avg); /*💡补充:为何不推荐用 pow(x, 2) 来求平方? 因为: pow() 是一个通用的浮点幂函数,相对效率较低; (x) * (x) 是最直接、最快速、最精确的方式; 特别是在整数或小数平方时,避免使用 pow() 更高效更安全。 */ } res2 /= n; num1[i]=res1; num2[i]=res2; delete[] a; // 释放内存 } for (int i=0; i<T; i++) { // 输出:极差是整数,方差保留3位小数 cout << num1[i] << " " << fixed << setprecision(3) << num2[i] << endl; /*fixed:固定小数位数格式输出; setprecision(n):设置保留 n 位小数;*/ } return 0; }
补充
| 引入控制输出精度的库 |
| 使用小数点后固定位数输出 |
| 设置保留小数点后 n 位 |
| 科学计数法输出(可选) |
| 即使为整数也显示小数点(可选) |
| 设置字段宽度(仅对下一个输出有效) |
| 设置填充字符 |
| 左对齐 |
| 右对齐(默认) |
| 数字符号左对齐,数值右对齐 |
| 小数点后固定位数输出 |
| 设置小数点后的位数或总有效位 |