lsmCC 发表于 2023-11-16 16:28:55

为什么没有输出呢

#include<stdio.h>
int main(void)
{
    /*********Begin*********/
    int n,k;
    int a;
    scanf("%d",&n);
    for(int i=1;i<=n;i++)
    {
      scanf("%d",&a);
    }
    scanf("%d",&k);
    int flag=1,c=0;
    for(int i=1;i<=n;i++)
    {
      int l=0,r=1000000;
      while(l<r)
      {
            int mid=l+r/2;
            if(a>=k)r=mid;
            else l=mid+1;
      }
      if(a==r)
      {
            c=i;
            flag=0;
      }
      
    }
    if(!flag)printf("%d",c);
    else printf("None");
   


    /*********End**********/
    return 0;
}

Mike_python小 发表于 2023-11-16 16:29:31

对不起,我之前给出的代码还是有问题。在进行二分查找时,需要将右边界r设置为数组的长度n而不是固定值1000000。此外,判断条件也需要修改为a == k。下面是修正后的代码:


#include <stdio.h>

int main(void) {
    int n, k;
    int a;
   
    scanf("%d", &n);
    for (int i = 1; i <= n; i++) {
      scanf("%d", &a);
    }
    scanf("%d", &k);
   
    int flag = 1, c = 0;
    for (int i = 1; i <= n; i++) {
      int l = 1, r = n;
      while (l <= r) {
            int mid = (l + r) / 2;
            if (a >= k)
                r = mid - 1;
            else
                l = mid + 1;
      }
      if (a == k) {
            c = i;
            flag = 0;
      }
    }
   
    if (!flag)
      printf("%d", c);
    else
      printf("None");
   
    return 0;
}


请注意,这段代码的执行结果将输出到控制台而不是作为函数的返回值。你可以在你的本地环境中编译和运行代码,然后查看控制台上的输出结果。

如果你还有其他问题,请随时向我提问。

isdkz 发表于 2023-11-16 16:34:09

在你的代码中,有一个小错误导致了没有输出。在二分查找的循环中,你需要将int mid=l+r/2;修改为int mid=(l+r)/2; 。因为l+r/2会先计算出l+r的值,然后再除以 2,而你想要先计算(l+r)除以 2 的值。修改后的代码如下:

#include<stdio.h>
int main(void)
{
    int n,k;
    int a;
    scanf("%d",&n);
    for(int i=1;i<=n;i++)
    {
      scanf("%d",&a[ i]);
    }
    scanf("%d",&k);
    int flag=1,c=0;
    for(int i=1;i<=n;i++)
    {
      int l=0,r=1000000;
      while(l<r)
      {
            int mid=(l+r)/2;
            if(a[ i]>=k)r=mid;
            else l=mid+1;
      }
      if(a[ i]==r)
      {
            c=i;
            flag=0;
      }
   
    }
    if(!flag)printf("%d",c);
    else printf("None");
   
    return 0;
}


这样修改后,代码将能够正确输出结果。
页: [1]
查看完整版本: 为什么没有输出呢