一个很简单的C语言的问题
#include<stdio.h>voidmain(){inta[15]={15,14,13,12,11,10,9,8,7,6,5,4,3,2,1};inti,j,l=0...
#include<stdio.h>
void main()
{int a[15]={15,14,13,12,11,10,9,8,7,6,5,4,3,2,1};
int i,j,l=0,m=14,n=1;
for(i=0;i<15;i++)
printf("%d ",a[i]);
printf("\n");
printf("输入你要查找的数字:\n");
scanf("%d",&j);
while(m>=l)
{if(j==a[l+(m-l)/2]) {printf("找到数据");break;}
if(j<a[l+(m-l)/2])
m=l+(m-l)/2-1;
else
l=l+(m-l)/2+1;
}
if(l>m)
printf("查找失败");
}
只有输入8的时候才能成功查找。。。就很绝望 展开
void main()
{int a[15]={15,14,13,12,11,10,9,8,7,6,5,4,3,2,1};
int i,j,l=0,m=14,n=1;
for(i=0;i<15;i++)
printf("%d ",a[i]);
printf("\n");
printf("输入你要查找的数字:\n");
scanf("%d",&j);
while(m>=l)
{if(j==a[l+(m-l)/2]) {printf("找到数据");break;}
if(j<a[l+(m-l)/2])
m=l+(m-l)/2-1;
else
l=l+(m-l)/2+1;
}
if(l>m)
printf("查找失败");
}
只有输入8的时候才能成功查找。。。就很绝望 展开
展开全部
#include<stdio.h>
main()
{int a[15]={15,14,13,12,11,10,9,8,7,6,5,4,3,2,1};
int i,j,l=0,m=14,n=1;
for(i=0;i<15;i++)
printf("%d ",a[i]);
printf("\n");
printf("输入你要查找的数字:\n");
scanf("%d",&j);
while(m>=l)
{if(j==a[l+(m-l)/2]) {printf("在a[%d]找到数据",l+(m-l)/2);break;}
if(j>a[l+(m-l)/2])
m=l+(m-l)/2-1;
else
l=l+(m-l)/2+1;
}
if(l>m)
printf("查找失败");
}
追问
谢谢!我想通了,我是把数组的顺序弄反了!
展开全部
不说你代码功能。
a[l+(m-l)/2这部分
m,l是整数 ‘/’是整除符号
(m-l)/2是只取整数 小数部分忽略
你确定是你要的结果么
a[l+(m-l)/2这部分
m,l是整数 ‘/’是整除符号
(m-l)/2是只取整数 小数部分忽略
你确定是你要的结果么
更多追问追答
追问
这个应该是没问题的,我之前考虑过了
追答
不明白你的逻辑,既然你已经把数放在数组了,如果只是想要找到 输入数 是否 在数组里。直接比较不好么。
#include
int main()
{
int a[15]={15,14,13,12,11,10,9,8,7,6,5,4,3,2,1};
int i,j;
for(i=0;i<15;i++)
printf("%d ",a[i]);
printf("\n");
printf("输入你要查找的数字:\n");
scanf("%d",&j);
i=0;
while(j!=a[i]) //输入的数和数组每一位比较
{
i++;
}
if(i<15)
{
printf("找到数据");
}
else
{
printf("查找失败");
}
return 0;
}
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
你这数组是从大到小的。。。
那你的二分也要改一改
那你的二分也要改一改
追问
QWQ万分感谢
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询