| 
 | 
 
20鱼币 
 
- #include <stdio.h>
 
  
- int main(void) {
 
 -         int n, k, mid;
 
 -         scanf("%d%d", &n, &k);
 
 -         int a[n];
 
 -         for (int i = 0; i < n; i++) {
 
 -                 scanf("%d", &a[i]);
 
 -         }
 
 -         int left = 0;
 
 -         int right = n - 1;
 
 -         while (left <= right) {
 
 -                 mid = left + (right - left) / 2; //给mid赋值
 
 -                 if (a[mid] < k) {
 
 -                         left = mid + 1;
 
 -                 } else if (a[mid] > k) {
 
 -                         right = mid - 1;
 
 -                 } else if (a[mid] == k) {
 
 -                         while (mid < n - 1) { //限制循环范围
 
 -                                 if (a[mid + 1] == a[mid]) {
 
 -                                         mid += 1;
 
 -                                 } else {
 
 -                                         break;
 
 -                                 }
 
 -                         }; //跳出循环
 
 -                 }
 
 -         }
 
 -         printf("%d\n", mid); //加上换行符
 
 - }
 
  复制代码 
 
无论是dev-c++还是pta都会死循环,但bing说可以正常运行,请问是为什么?另外请问如果我想让目标数不在数组中的时候打印-1应该怎么实现呢? 
这个问题可能是因为输入数据的格式问题。如果在输入数据的时候,没有按照预期的格式输入,可能会导致死循环。确保在输入数据时,正确输入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[n];
 
 -     for (int i = 0; i < n; i++) {
 
 -         scanf("%d", &a[i]);
 
 -     }
 
 -     int left = 0;
 
 -     int right = n - 1;
 
 -     int found = 0;
 
 -     while (left <= right) {
 
 -         mid = left + (right - left) / 2; //给mid赋值
 
 -         if (a[mid] < k) {
 
 -             left = mid + 1;
 
 -         } else if (a[mid] > k) {
 
 -             right = mid - 1;
 
 -         } else if (a[mid] == k) {
 
 -             found = 1;
 
 -             while (mid < n - 1) { //限制循环范围
 
 -                 if (a[mid + 1] == a[mid]) {
 
 -                     mid += 1;
 
 -                 } else {
 
 -                     break;
 
 -                 }
 
 -             }; //跳出循环
 
 -             break;
 
 -         }
 
 -     }
 
 -     if (found) {
 
 -         printf("%d\n", mid); //加上换行符
 
 -     } else {
 
 -         printf("-1\n");
 
 -     }
 
 - }
 
 
  复制代码 
 
这个修改后的代码应该可以解决您的问题。请确保输入数据的正确性,并尝试在不同的编译器和平台上运行代码。 
 
 
 |   
 
 
最佳答案
查看完整内容 
这个问题可能是因为输入数据的格式问题。如果在输入数据的时候,没有按照预期的格式输入,可能会导致死循环。确保在输入数据时,正确输入n和k的值,然后正确输入n个数组元素。
关于目标数不在数组中时打印-1的问题,您需要在循环结束后判断一下是否找到了目标数。您可以在 while 循环之前设置一个标志变量(例如 int found = 0; ),如果找到目标数,将其设置为1。在循环结束后,根据这个标志变量来判断是否需要打印-1。
 ... 
 
 
 
 
 
 
 |