从5,7,11,23,43,67这几个数字中找出最接近他们平均值的那个数字?用java编写

解决方案 »

  1.   


    public class Avg{
      public static void main(String[] args){
        int[] num = new int[]{5,7,11,23,43,67};
        int sum = 0;
        for (int i = 0; i < num.length; i++)
        {
          sum += num[i];
        }
        System.out.println(sum/num.length);
      }
    }
      

  2.   

    public class TestAVG { public static int getAV(int[] a){
    int sum = 0;
    for(int i = 0; i < a.length; i++){
    sum += a[i];
    }
    int avg = sum / a.length;
    int minbetween = Math.abs(avg - a[0]);
    int re = a[0];
    for(int i = 0; i < a.length; i++){
    if(minbetween > Math.abs(avg - a[i])){
    minbetween = Math.abs(avg - a[i]);
    re = a[i];
    }
    }
    return re;
    }

    public static void main(String[] args) {
    int[] a = {5,7,11,23,43,67};
    System.out.println(getAV(a));
    }
    }不过我这个方法只能返回前面一个与平均值最接近的数字,如果有多个就不行了,而且我感觉这个方法不够简洁,不过简单一点,呵呵!~
      

  3.   


    public class Avg{
      public static void main(String[] args){
        int[] num = new int[]{5,7,11,23,43,67};
        int sum = 0;
        for (int i = 0; i < num.length; i++)
        {
          sum += num[i];
        }
        double avg=(sum/num.length*1l);
        double[] diff=double[]{0,0,0,0,0,0};
        for (int i = 0; i < num.length; i++)
        {
          diff[i]=num[i]-avg;
        }
    //接下来就是从diff中求最小值,简单吧。
      }
    }
      

  4.   

    你这个乘以11是做什么用的呢 
    能不能吧diff中求最小值都写出来呢
      

  5.   

    汗,最后四舍五入不应该这么写,改了一下
    import java.math.BigDecimal;
    import java.math.MathContext;public class Avg
    {
    public static void main(String[] args)
    {
    int[] num = new int[] { 5, 7, 11, 23, 43, 67 };
    int sum = 0;
    for (int i = 0; i < num.length; i++)
    {
    sum += num[i];
    }
    System.out.println(new BigDecimal(sum / num.length, new MathContext(BigDecimal.ROUND_HALF_UP)));
    }
    }
      

  6.   

    public static void main(String[] args) { int[] i = new int[] { 5, 7, 11, 23, 43, 67 };
    double temp = 0;
    int[] k = new int[6];
    int[] s = new int[6];
    int[] si = new int[6];
    int c = 0, c1 = 0;
    int aaa = 0, bbb = 0;
    int ddd = 0;// 最近的值
    for (int j = 0; j < i.length; j++) {
    temp += i[j];
    }
    temp = temp / 6;
    System.out.println(temp);
    for (int j = 0; j < i.length; j++) {
    k[j] = (int) (i[j] - temp);
    }
    for (int j = 0; j < k.length; j++) {
    if (k[j] < 0) {
    s[c] = k[j];
    c++;
    } else {
    si[c1] = k[j];
    c1++;
    }
    }
    Arrays.sort(s);
    Arrays.sort(si);
    for (int j = s.length; j > 0; j--) {
    if (s[j - 1] != 0) {
    aaa = s[j - 1];
    break;
    }
    }
    for (int j = 0; j < si.length; j++) {
    if (si[j] != 0) {
    bbb = si[j];
    break;
    }
    }
    if (Math.abs(aaa) > Math.abs(bbb)) {
    ddd = (int) (temp - bbb);
    } else {
    ddd = (int) (temp + aaa);
    }
    System.out.println(ddd);
    }
    我写的更复杂 有没有简单的方法呢
      

  7.   

    这个才是楼主真正想要得吧
    import java.math.BigDecimal;
    import java.math.MathContext;public class Avg
    {
    public static void main(String[] args)
    {
    int[] num = new int[] { 5, 7, 11, 23, 43, 67 };
    int sum = 0;
    for (int i = 0; i < num.length; i++)
    {
    sum += num[i];
    }
    int avg = new BigDecimal(sum / num.length, new MathContext(BigDecimal.ROUND_HALF_UP)).intValue();
    int result = 0;
    int minDiff = Integer.MAX_VALUE;
    for (int i = 0; i < num.length; i++)
    {
    int diff = new BigDecimal(num[i] - avg).abs().intValue();
    if (diff < minDiff)
    {
    minDiff = diff;
    result = num[i];
    }
    }
    System.out.println(result);
    }
    }