如题

解决方案 »

  1.   

    你都说了差最小,,都减去变量A的值,,然后sort一下,,取第一个就行了吗!~~
      

  2.   

    方法比较笨啊!~~见笑!~~        static void Main(string[] args)
            {
                int[] arr = new int[] { 5, 10, 13, 18, 27 };
                List<int> lists = new List<int>();
                lists.AddRange(arr);
                int k = 12;   //设置变量
                int j=0;
                for (int i = 0; i < lists.Count; i++)
                {
                    lists[i] = Math.Abs(lists[i] - k);
                }
                lists.Sort();
                for (int i = 0; i < arr.Length; i++)
                {
                    if (Math.Abs(arr[i] - k) == lists[0])
                    {
                        j = arr[i];
                    }
                }
                Console.WriteLine(j.ToString());
                Console.ReadLine();
            }
      

  3.   

    通过数组或List保存值,再相减取最小值的索引。可用二分法
      

  4.   


    // 找出与A差值最小的1个数
    public int num(int A)
    {
        int[] arrA = new int[] { 5, 10, 13, 18, 27 };   //原始值
        
        int[] arrB = new int[arrA.Length];              //差值
        for (int i = 0; i < arrA.Length; i++) arrB[i] = Math.Abs(arrA[i] - A);    int[] arrC = new int[arrA.Length];              
        for (int i = 0; i < arrB.Length; i++) arrC[i] = arrB[i];
        Array.Sort(arrC);               //与A差值从小到大排列
        return arrA[Array.IndexOf(arrB, arrC[0], 0)];
      // 如果 第0,1 ... 位 相等,结果可能是两个或多个数
    }
    // 测试用例
    private void button5_Click(object sender, EventArgs e)
    {
        MessageBox.Show(num(12).ToString());
    }
      

  5.   


    public int num(int A)
    {
       int[] arrA = new int[] { 5, 10, 13, 18, 27 };   //原始值
       int[] arrB = new int[arrA.Length];              //与A差值
       for (int i = 0; i < arrA.Length; i++) arrB[i] = Math.Abs(arrA[i] - A);
       int[] arrC = new int[arrA.Length];
       arrB.CopyTo(arrC, 0);
       Array.Sort(arrC);                               //与A差值排序
       return arrA[Array.IndexOf(arrB, arrC[0], 0)];
    }//测试用例
    private void button5_Click(object sender, EventArgs e)
    {
        MessageBox.Show(num(12).ToString());
    }
      

  6.   

    没这么简单,题目要求返回的不是差值,是差最小的那个值。如果只是简单的返回最小差值与A之和,也会出错,因为差值可能为正或负。public int num(int A)
    {
       int aInt = new int [](5,10,13,18,27};//原始值
       array.sort(aInt);
       int intLenth = aInt.Lenth;
       int CaStd = aInt[intLenth-1]-aInt[0];//返回当前的差
       //上面这一段是先确定当前序列的极值之差,确保函数不会返回错误的代码,如果
       //不需要,也可以把手CaStd直接指定成一个极大的值,例如 2^32-1 之类
       int CaMin = 0;   for(int i = 0; i < intLenth; i ++)
       {
          int Curr = aInt[i];
          int Ca = Curr - A;
          if(Ca < 0) Ca = -Ca;
          if(Ca < CaStd)
          {
             CaStd = Ca;
             CaMin = Curr;
          }
       }
       return CaMin;
    }
      

  7.   

    很多人说用sort,其实Sort是一个很慢的算法,能不用尽量不用。原题要求返回差值最小的那个元素,并没有要求其他差值的排序信息,因此完全不需要用sort,11楼的算法就足够了:)