方法比较笨啊!~~见笑!~~ 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(); }
通过数组或List保存值,再相减取最小值的索引。可用二分法
// 找出与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()); }
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()); }
没这么简单,题目要求返回的不是差值,是差最小的那个值。如果只是简单的返回最小差值与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; }
{
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();
}
// 找出与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());
}
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());
}
{
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;
}