陈落轩 发表于 2023-4-30 21:16:36

为什么这份代码bing说可以正常运行,但是我的电脑陷入了死循环?


#include <stdio.h>

int main(void) {
        int n, k, mid;
        scanf("%d%d", &n, &k);
        int a;
        for (int i = 0; i < n; i++) {
                scanf("%d", &a);
        }
        int left = 0;
        int right = n - 1;
        while (left <= right) {
                mid = left + (right - left) / 2; //给mid赋值
                if (a < k) {
                        left = mid + 1;
                } else if (a > k) {
                        right = mid - 1;
                } else if (a == k) {
                        while (mid < n - 1) { //限制循环范围
                                if (a == a) {
                                        mid += 1;
                                } else {
                                        break;
                                }
                        }; //跳出循环
                }
        }
        printf("%d\n", mid); //加上换行符
}

无论是dev-c++还是pta都会死循环,但bing说可以正常运行,请问是为什么?另外请问如果我想让目标数不在数组中的时候打印-1应该怎么实现呢?

isdkz 发表于 2023-4-30 21:16:37

陈落轩 发表于 2023-4-30 21:18
大佬好,重新发了好像代码粘贴时有点问题

这个问题可能是因为输入数据的格式问题。如果在输入数据的时候,没有按照预期的格式输入,可能会导致死循环。确保在输入数据时,正确输入n和k的值,然后正确输入n个数组元素。

关于目标数不在数组中时打印-1的问题,您需要在循环结束后判断一下是否找到了目标数。您可以在 while 循环之前设置一个标志变量(例如 int found = 0; ),如果找到目标数,将其设置为1。在循环结束后,根据这个标志变量来判断是否需要打印-1。

修改后的代码如下:

#include <stdio.h>

int main(void) {
    int n, k, mid;
    scanf("%d%d", &n, &k);
    int a;
    for (int i = 0; i < n; i++) {
      scanf("%d", &a);
    }
    int left = 0;
    int right = n - 1;
    int found = 0;
    while (left <= right) {
      mid = left + (right - left) / 2; //给mid赋值
      if (a < k) {
            left = mid + 1;
      } else if (a > k) {
            right = mid - 1;
      } else if (a == k) {
            found = 1;
            while (mid < n - 1) { //限制循环范围
                if (a == a) {
                  mid += 1;
                } else {
                  break;
                }
            }; //跳出循环
            break;
      }
    }
    if (found) {
      printf("%d\n", mid); //加上换行符
    } else {
      printf("-1\n");
    }
}


这个修改后的代码应该可以解决您的问题。请确保输入数据的正确性,并尝试在不同的编译器和平台上运行代码。

isdkz 发表于 2023-4-30 21:17:22

你的代码就一句 include?

陈落轩 发表于 2023-4-30 21:18:16

isdkz 发表于 2023-4-30 21:17
你的代码就一句 include?

大佬好,重新发了{:10_266:}好像代码粘贴时有点问题

陈落轩 发表于 2023-4-30 22:34:45

isdkz 发表于 2023-4-30 21:16
这个问题可能是因为输入数据的格式问题。如果在输入数据的时候,没有按照预期的格式输入,可能会导致死循 ...

谢谢大佬{:10_279:}

isdkz 发表于 2023-4-30 22:35:43

陈落轩 发表于 2023-4-30 22:34
谢谢大佬

不客气{:5_109:}
页: [1]
查看完整版本: 为什么这份代码bing说可以正常运行,但是我的电脑陷入了死循环?