为什么没有输出呢
#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;
} 对不起,我之前给出的代码还是有问题。在进行二分查找时,需要将右边界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;
}
请注意,这段代码的执行结果将输出到控制台而不是作为函数的返回值。你可以在你的本地环境中编译和运行代码,然后查看控制台上的输出结果。
如果你还有其他问题,请随时向我提问。 在你的代码中,有一个小错误导致了没有输出。在二分查找的循环中,你需要将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]