林林的天下
2017-07-05 06:48
采纳率: 20%
浏览 820
已采纳

大神们! 请教个问题 如何取得一组数的中值

请问一个集合存放n个数 我怎么计算这n个数的中值 如果方便请贴代码,谢谢!!

  • 写回答
  • 好问题 提建议
  • 关注问题
  • 收藏
  • 邀请回答

7条回答 默认 最新

  • 大伟爱自由 2017-07-05 08:05
    已采纳

    您这里的取中间值是取排序的序号在中间还是数值的大小在中间?
    如果是第一种去取排序序号在中间的比较简单

    入托是第二种取数值在中间的也不难

    public static void main(String[] args) {
    
        List<Integer> numList = new ArrayList<Integer>();
    
        numList.add(12);
        numList.add(19);
        numList.add(6);
        numList.add(2);
        numList.add(22);
    
        //取序号在中间的值
        int position = (numList.size()-1)/2;
        int num1 = numList.get(position);
    
        //取大小在中间,先排序后取值
        for(int i = 0;i<numList.size();i++){
            for(int j = i+1;j<numList.size();j++){
                if(numList.get(j)>numList.get(i)){
                    int temp = numList.get(j);
                    numList.set(j, numList.get(i));
                    numList.set(i, temp);
                }
            }
        }
        int num2 = numList.get(position);
    
        System.out.println(num1);
        System.out.println(num2);
    }
    
    
    
    已采纳该答案
    评论
    解决 无用
    打赏 举报
  • Unique_TingZi 2017-07-05 06:47

    你说的是什么语言,这样好敲具体代码给你

    评论
    解决 无用
    打赏 举报
  • cclulu123 2017-07-05 06:49

    暴力一点先排序再取中间的数如何?

    评论
    解决 无用
    打赏 举报
  • 黑骑军 2017-07-05 07:00

    1 先获取数组长度
    2如果这个数能不被2整除,就是奇数,去除2的那个值+1作为key就是中间数。如果能被2整除.....我也不知道你的要求了

    评论
    解决 无用
    打赏 举报
  • HappyerMano 2017-07-05 08:09

    你说的中值是指中间的那个数的值,还是说这些数大小最居中的那个值啊。如果前者的话,楼上的就可以。
    如果是后者的话,如下:

         #include<math.h>
    
        int a[5] = {3,6,7,10,5};
    
        int total = 0;
    
        //计算总和
    
        for(int i=0; i<5; ++i)
        {
                    total += a[i];
        }
        //找到和总和除以2的值最接近的那个
    
        int DIF = 0;
        int idx = 0;
    
        for(int i=0; i<5; ++i)
        {
                    //abs取绝对值
                    int tmp = abs(a[i] - total/2);
                    if(tmp < DIF)
                    {
                            DIF = tmp;
                            idx = i;
                    }       
        }
    
        cout << "中间值:" << a[idx] <<endl;
    
    
    评论
    解决 无用
    打赏 举报
  • zhilin_tang 2017-07-05 08:13

    楼主给的是乱序,最后的c语言方法要先排序。

    评论
    解决 无用
    打赏 举报
  • 大伟爱自由 2017-07-06 01:10

    依据你的需求。偶数求中间数的平均数。奇数取中间值。代码如下
    public static void main(String[] args) {

        List<Integer> numList = new ArrayList<Integer>();
    
        numList.add(12);
        numList.add(19);
        numList.add(6);
        numList.add(2);
        numList.add(22);
    
        //同样先排序
        for(int i = 0;i<numList.size();i++){
            for(int j = i+1;j<numList.size();j++){
                if(numList.get(j)>numList.get(i)){
                    int temp = numList.get(j);
                    numList.set(j, numList.get(i));
                    numList.set(i, temp);
                }
            }
        }
        //奇数求平均数
        if(numList.size()%2 != 0){
            int position = (numList.size()-1)/2;
            int num1 = numList.get(position);   //奇数中间值
            //.....求平均数同之前的代码
        }
        //偶数求中间两个数的平均数
        else{
            int position1 = numList.size()/2;
            int position2 = numList.size()/2-1;
    
            int num2 = (numList.get(position1)+numList.get(position2))/2;
    
        }
    }
    

    }

    
    
    评论
    解决 无用
    打赏 举报

相关推荐 更多相似问题