目标值与数组所有元素去比对,找出最接近的元素,输出下标

每日一练社区 2021-08-11 11:49:05

举例如下:一个数组{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 idx = 0;
    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++)
    {
        int diff = arr[i] - n;
        if (diff < 0)
            diff = -diff;
        _________________;
    }
    printf("最接近的是%d 下标是%d", arr[idx], idx);
    return 0;
}
...全文
301 7 打赏 收藏 举报
写回复
7 条回复
切换为时间正序
请发表友善的回复…
发表回复
方圆不一样 2022-10-26
  • 打赏
  • 举报
回复
请问(1<<31)-1什么意思?
枫叶2000 02-26
  • 举报
回复
@方圆不一样 其实这里就是初始化了一个很大的值给min,后面只要是diff小于min的就赋值给min,min会越来越小。
MAX-LING 3天前
  • 举报
回复
@方圆不一样 就是取了个int类最大值,int四个字节32位,(1<<31)表示1左移31位,符号位为1,其他为0.-1就变成符号位为0其他位为1。例如1<<2就是100。
littleStorm120 2022-01-12
  • 打赏
  • 举报
回复 1
先初始化个32位最大值,求差值绝对值最小。
谁吃薄荷糖 2021-11-11
  • 打赏
  • 举报
回复 3
遍历,找最小差值,输出下标
  • 打赏
  • 举报
回复 1
单纯做题排除法最快了diff>0,diff=-diff直接排除,i>直接排除
Navigator_Z 2021-08-29
  • 打赏
  • 举报
回复 2
数组值与目标值的差距越小越接近
相关推荐
发帖
每日一练

9232

社区成员

Study well and make progress every day
其他 企业社区
社区管理员
  • 每日一练社区
  • CSDN学习
  • 幻灰龙
加入社区
帖子事件
创建了帖子
2021-08-11 11:49
社区公告
暂无公告