举例如下:一个数组{915,941,960,976,992,1015,1034,1050,1073,1089,1115,1131,1150,1166,1182,1208,1227};目标值假设是1000,最接近元素为992,下标为4
#include <stdio.h>
int main()
{
int min = (1 << 31) - 1;//初始化int类型的,是它成为32位的最大数2^32-1
int idx = 0;//把下标用idx表示,并初始化为1
int arr[] = { 915, 941, 960, 976, 992, 1015, 1034, 1050, 1073, 1089, 1115, 1131, 1150, 1166, 1182, 1208, 1227 };
int n = 1000;
for (int i = 0; i < sizeof(arr) / sizeof(int); i++)//sizeof(arr) / sizeof(int)表示该数组中int类型元素的个数
{
int diff = arr[i] - n;//依次索引,计算出元素与n的差值
if (diff < 0)
diff = -diff;//作差小于0就去绝对值
if (diff < min)
{
min = diff;//让绝对值最小的数作为新的min
idx = i;//记录下标(从0索引)
}
}
printf("最接近的是%d 下标是%d", arr[idx], idx);
return 0;
}
在c语言中的1<<n表示:
如1<<3表示把1的二进制0000 0001左移三位即:0000 1000
也即:
n=1 1*2
n=2 1*2*2
n=3 1*2*2*2
int类型占4个字节,32位,最大值是2^31-1