嗨,我创建了一个代码来计算一组数字的标准差,下面是我的代码:
public class standardDev {
public static void main(String[] args) {
Scanner in = new Scanner(System.in);
int n = in.nextInt();
int[] arr = new int[n];
double sum = 0.0;
for(int i = 0; i < n; i++) {
arr[i] = in.nextInt();
}
Arrays.sort(arr);
double median = n % 2 != 0 ? arr[n/2] : (arr[n/2] + arr[(n/2)-1])/2;
for(int i = 0; i < n; i++) {
sum += Math.pow(arr[i] - median,2);
}
System.out.printf("%.1f", Math.sqrt(sum/n));
}
}但是,如果输入如下:
10 64630 11735 14216 99233 14470 4978 73429 38120 51135 67060
我得到了与预期答案不同的结果。我的输出:30475.6预期输出:30466.9
但是,如果我尝试了下面的输入,我得到了正确的答案:
5 10 40 30 50 20
我的输出:14.1
预期产出:14.1
发布于 2016-09-07 14:37:38
重写代码以实际计算标准偏差,这是基于平均值的:
import java.util.*;
import java.lang.*;
import java.io.*;
class standardDev
{
public static void main(String[] args) {
Scanner in = new Scanner(System.in);
int n = in.nextInt();
int[] arr = new int[n];
double sum = 0.0;
double mean = 0;
for(int i = 0; i < n; i++) {
arr[i] = in.nextInt();
mean += arr[i];
}
mean /= n;
for(int i = 0; i < n; i++) {
sum += Math.pow(arr[i] - mean,2);
}
System.out.printf("%.1f", Math.sqrt(sum/n));
}
}示例:http://ideone.com/qY1wkw
https://stackoverflow.com/questions/39372536
复制相似问题