re怠惰的未禾 2022-03-12 17:37 采纳率: 75%
浏览 25
已结题

二分查找(提交oj平台时显示运行错误)

在有序序列中查找某一元素x。

输入

首先输入一个正整数n(n<=100000),表示该序列有n个整数,然后按从小到大的顺序输入n个整数;

接着是一个正整数m,表示有m次查找;

最后是m个整数,表示m个要查找的整数x。

输出

对于每一个次查找,有一行输出。若序列中存在要查找的元素x,则输出元素x在序列中的序号(序号从0开始);若序列中不存在要查找的元素x,则输出"Not found!"。

样例输入 Copy

5
1 3 5 7 9
11
-1
1
2
3
4
5
6
7
8
9
10

样例输出 Copy

Not found!
0
Not found!
1
Not found!
2
Not found!
3
Not found!
4
Not found!


#include <stdio.h>//二分搜索 

int main(void) {
    int n, m, x, i;
    int a[100] = { 0 };
    int low, high, mid;
    int flag = 0;
    scanf("%d", &n);

    for (i = 0; i < n; i++) {
        scanf("%d", &a[i]);
    }
    scanf("%d", &m);

    while (m--) {
        flag = 0;
        scanf("%d", &x);

        low = 0;
        high = n - 1;
        mid = (low + high) / 2;

        while (low<=high) {
            if (x == a[mid]) {
                flag = 1;
                break;
            }
            else if (x < a[mid]) {
                high = mid - 1;
                mid = (low + high) / 2;
            }
            else if (x > a[mid]) {
                low = mid + 1;
                mid = (low + high) / 2;
            }
        }

        if (flag == 1)
            printf("%d\n", mid);
        else {
            printf("Not found!\n");
        }
    }

    return 0;
}

提交oj平台显示运行错误
求解

  • 写回答

1条回答 默认 最新

  • 快乐鹦鹉 2022-03-12 17:55
    关注

    题目要求:
    首先输入一个正整数n(n<=100000)
    可你定义的数组是:int a[100] = { 0 };
    只有100个啊,改成int a[100000] = { 0 };

    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论

报告相同问题?

问题事件

  • 系统已结题 3月21日
  • 已采纳回答 3月13日
  • 创建了问题 3月12日

悬赏问题

  • ¥15 2020长安杯与连接网探
  • ¥15 关于#matlab#的问题:在模糊控制器中选出线路信息,在simulink中根据线路信息生成速度时间目标曲线(初速度为20m/s,15秒后减为0的速度时间图像)我想问线路信息是什么
  • ¥15 banner广告展示设置多少时间不怎么会消耗用户价值
  • ¥16 mybatis的代理对象无法通过@Autowired装填
  • ¥15 可见光定位matlab仿真
  • ¥15 arduino 四自由度机械臂
  • ¥15 wordpress 产品图片 GIF 没法显示
  • ¥15 求三国群英传pl国战时间的修改方法
  • ¥15 matlab代码代写,需写出详细代码,代价私
  • ¥15 ROS系统搭建请教(跨境电商用途)