| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 967 人关注过本帖
标题:[讨论]菜鸟提问
只看楼主 加入收藏
mazy_lamb
Rank: 1
等 级:新手上路
帖 子:2
专家分:0
注 册:2005-10-12
收藏
 问题点数:0 回复次数:10 
[讨论]菜鸟提问

有5个数按小到大的顺序存放在一个数组中,输入一个数,要求按折半查找法找出该数组中的第几个元素的值。如果该数不在数组中,则打印出“无此表”。

#include<stdio.h> #define N 5

void main() { int i,number,top,bott,mid,loca=0,a[ N],flag=0,sign=1; char c; // 输入五个数 printf("Enter data:\n"); scanf("%d",&a[0]); //判断是否从小到大 i=1; while(i<N) { scanf("%d",&a[ i]); if(a[ i]>a[i-1]) i++; else printf("Enter the number angain:"); } printf("\n"); //输出五个数 for(i=0;i<N;i++) printf("%4d",a); printf("\n");

flag=1; //开始折半查找 while(flag) { sign=1; printf("Input the number to look for:"); scanf("%d",&number); top=0; bott=N-1; if((number<a[0])||(number>a[N-1])) flag=-1; while((sign==1)&&(top<=bott)) { mid=(bott+top)/2; if(number==a[mid]) { printf("Find %d ,its position is %d\n",number,mid+1); sign=0; } else if(number<a[mid]) bott=mid-1; else bott=mid+1; } if(sign==1) printf("%d is not found .\n",number); printf("Continue or not(Y/N)?"); fflush(stdin); scanf("%c",&c); if(c=='N'||c=='n') flag=0; } } 不知怎么的,程序运行时除了第三个数能得出正确的结果外,其他的几个都不能得到结果,请各位大虾指点一下,哪里出问题了??谢谢!!

搜索更多相关主题的帖子: 提问 
2005-10-15 06:33
liyanguestc
Rank: 1
等 级:新手上路
帖 子:23
专家分:0
注 册:2005-5-15
收藏
得分:0 

#include<stdio.h> #define N 5

void main() { int i,number,top,bott,mid,loca=0,a[ N],flag=0,sign=1; char c; // 输入五个数 printf("Enter data:\n"); scanf("%d",&a[0]); //判断是否从小到大 i=1; while(i<N) { scanf("%d",&a[ i]); if(a[ i]>a[i-1]) i++; else printf("Enter the number angain:"); } printf("\n"); //输出五个数 for(i=0;i<N;i++) printf("%4d",a[i]); printf("\n");

flag=1; //开始折半查找 while(flag) { sign=1; printf("Input the number to look for:"); scanf("%d",&number); top=0; bott=N-1; if((number<a[0])||(number>a[N-1])) flag=-1; while((sign==1)&&(top<=bott)) { mid=(bott+top)/2; if(number==a[mid]) { printf("Find %d ,its position is %d\n",number,mid+1); sign=0; } else if(number<a[mid]) bott=mid-1; else top=mid+1; } if(sign==1) printf("%d is not found .\n",number); printf("Continue or not(Y/N)?"); fflush(stdin); scanf("%c",&c); if(c=='N'||c=='n') flag=0; } } 这样就ok了!!自己多检查一下吗!!!


2005-10-15 09:20
amazai023
Rank: 1
等 级:新手上路
帖 子:1
专家分:0
注 册:2005-10-15
收藏
得分:0 
那个对半查找是什么意思哟?我没理解到!!!!
大侠帮解释一到低是什么意思~~~
谢谢了~~`
2005-10-15 16:57
流金岁月
Rank: 1
等 级:新手上路
帖 子:2
专家分:0
注 册:2005-10-16
收藏
得分:0 
那个对半查找是什么意思哟?我没理解到!!!!
大侠帮解释一到低是什么意思~~~
谢谢了~~`
2005-10-16 17:27
流金岁月
Rank: 1
等 级:新手上路
帖 子:2
专家分:0
注 册:2005-10-16
收藏
得分:0 
那个对半查找是什么意思哟?我没理解到!!!!
大侠帮解释一到低是什么意思~~~
谢谢了~~`
2005-10-16 17:30
踏魔狼
Rank: 6Rank: 6
等 级:贵宾
威 望:24
帖 子:1322
专家分:33
注 册:2005-9-22
收藏
得分:0 
不理解吗?我用一个例子说明说明.
你在查字典的时候大致翻到字典的中部.
在该页上挑一个字,与指定的字比较.
如果这个字就是指定的字,停止.
如果指定的字在页挑选的字之后,翻到字典的后面某页,重复第二行的过程.
如果指定的字在该页挑选的字之前,翻到字典的前面某页,重复第二行的过程.

=×&D o I p R e E n C g T l X&×=
2005-10-16 23:47
mfkdx123
Rank: 1
等 级:新手上路
帖 子:7
专家分:0
注 册:2005-10-11
收藏
得分:0 
我怎么都看不懂呀
2005-10-17 20:32
踏魔狼
Rank: 6Rank: 6
等 级:贵宾
威 望:24
帖 子:1322
专家分:33
注 册:2005-9-22
收藏
得分:0 
拿本书照着做你就会懂了.

=×&D o I p R e E n C g T l X&×=
2005-10-17 23:46
socks
Rank: 1
等 级:新手上路
帖 子:79
专家分:0
注 册:2005-10-13
收藏
得分:0 
比如说你的数是4。有十个数1-10,先跟中间的比,十个数中间的就是5或者6,取哪个都行,假如和5比,4比5小,这时候可以确定6-10都不是,都可以去掉。再和1-5中间的数3比,4比3大,那么1-3可以去掉,比5小比3大那就一定是4了,也就是说一共就比较两次就比较出来了。明白?

虔诚的初学者~~~
2005-10-18 11:12
socks
Rank: 1
等 级:新手上路
帖 子:79
专家分:0
注 册:2005-10-13
收藏
得分:0 
说到这个问题我想起一个问题,比较经典,有8个球,其中有一个比其他7个密度大,有一个天平,问称几次能把那个密度大的挑出来,答案是2次
先左边放3个右边放3个,如果天平是平的,说明密度大的再剩下的2个里,把剩下的2个放上就知道了
如果天平是不平的,那么重的一面的3个里再随便拿出两个来称,如果平,那么剩下的就是,如果不平,重的就是。
和折半法一样,就是算法的优化。

虔诚的初学者~~~
2005-10-18 11:15
快速回复:[讨论]菜鸟提问
数据加载中...
 
   



关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.023745 second(s), 7 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved