判断一个数是否在数列中:

来源:百度知道 编辑:UC知道 时间:2024/05/10 18:43:08
main()
{
int a[9]={1,3,5,7,9,11,13,15,17},i,n=9,number;
printf("请输入一个数:\n");
scanf("%d",&number);
if(number<a[0]||number>a[9])
printf("%d不在数列中。");
for(i=0;i<n;i++)
{n/=2;
if(number==a[n])
{printf("%d是数列中的第%d个数",number,n+1);
break;}
else if(number>a[n])
{i=i+n;
n=9;}
}
}
这个程序只有输入5才会输出.请大侠们改一下错,多谢了!!!
我想练习二分法,能不能把正确的算法解释一下.最好做好程序.谢谢啦!

你的算法有问题

根据你写的改了一下,要注意n不能是9,a[9]下标越界了!请对比一下你写的,要注意一些小毛病!!

main()
{
int a[9]={1,3,5,7,9,11,13,15,17},m=0,n=8,number;
printf("请输入一个数:\n");
scanf("%d",&number);
if(number<a[0]||number>a[9]){
printf("%d不在数列中。",number);
}else{
while(1){
if(m<n){
n=(n-m)/2+m;
if(number==a[n]){
printf("%d是数列中的第%d个数",number,n+1);
break;
}else if(number>a[n]){
m=n+1;
n=2*n;
}
}else{
printf("%d不在数列中。",number);
break;
}
}
}
}

不瞒您说,算法思路一塌糊涂.joke.
为什么不直接扫9次呢?主要部分:
int booli = 1;
for(i=0;i<n;i++)
if(number == a[i])
{printf(...);
booli = 0;
break;
}
if (booli) printf("不在");
看样子你想尝试二分法效率高,但这数据太小了.
如果数据大用二分也不错,不过不是这样做的.