首页
学习
活动
专区
圈层
工具
发布

标准差
EN

Stack Overflow用户
提问于 2016-09-07 14:23:53
回答 1查看 198关注 0票数 0

嗨,我创建了一个代码来计算一组数字的标准差,下面是我的代码:

代码语言:javascript
复制
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

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2016-09-07 14:37:38

重写代码以实际计算标准偏差,这是基于平均值的:

代码语言:javascript
复制
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

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/39372536

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档