📄 subject_60473.htm
字号:
<p>
序号:60473 发表者:Romantic 发表日期:2003-11-13 16:47:37
<br>主题:请教一道算法题!
<br>内容:设a[0:n-1]是一个已排好序的数组。请改写二分搜索算法,使得当搜索元素x不在数组中时,返回小于x的最大元素位置i和大于x的最小元素位置j。当搜索元素在数组中时,i和j相同,均为x在数组中的位置。<BR><BR>
<br><a href="javascript:history.go(-1)">返回上页</a><br><a href=http://www.copathway.com/cndevforum/>访问论坛</a></p>
<hr size=1>
<blockquote><p>
<font color=red>答案被接受</font><br>回复者:lbb 回复日期:2003-11-19 20:05:14
<br>内容:我现在编了一个程序,你试试,我是现编现卖:<BR>#include <math.h><BR>#include <stdio.h><BR> <BR>void main()<BR>{<BR> int i,k,j;<BR> double a[100];//100是数组的长度,可以自已更改<BR>double x;<BR>//给x和a[100]赋值,然后下面是主要程序<BR> for(k=0;k<100;k++)<BR>{<BR> if(a[k]=x)<BR> {<BR> i=j=k;<BR> go to loop;<BR> }<BR> else<BR> {<BR> if((a[k]<x)&&(a[k+1]>x))<BR> {<BR> i=k;<BR> j=k+1;<BR> go to loop;<BR> }<BR> }<BR> loop: printf("i=%d j= %d\n",i,j);<BR>}
<br>
<a href="javascript:history.go(-1)">返回上页</a><br><a href=http://www.copathway.com/cndevforum/>访问论坛</a></p></blockquote>
<hr size=1>
<blockquote><p>
回复者:黑羽 回复日期:2003-11-19 23:20:04
<br>内容:1楼的朋友,虽然你的能达到目的,但你的算法不是二分搜索算法吧?
<br>
<a href="javascript:history.go(-1)">返回上页</a><br><a href=http://www.copathway.com/cndevforum/>访问论坛</a></p></blockquote>
<hr size=1>
<blockquote><p>
回复者:李彬彬 回复日期:2003-11-20 10:49:52
<br>内容:不好意思,忘记主题了,只想达到目的而没考虑过程,别见笑,现编现卖肯定会出错的。
<br>
<a href="javascript:history.go(-1)">返回上页</a><br><a href=http://www.copathway.com/cndevforum/>访问论坛</a></p></blockquote>
<hr size=1>
<blockquote><p>
回复者:Romantic 回复日期:2003-11-20 16:23:50
<br>内容:谢谢你们这么关心我的问题<BR>~~!!!<BR>Thank you very much!
<br>
<a href="javascript:history.go(-1)">返回上页</a><br><a href=http://www.copathway.com/cndevforum/>访问论坛</a></p></blockquote>
<hr size=1>
<blockquote><p>
回复者:李彬彬 回复日期:2003-11-20 17:20:49
<br>内容:不好意思,我没有给你很好的答案,但是我很高兴能帮你,即使我的帮助是没用的,不用客气!你是一个不错的人,虽然我不认识你,祝你好运!
<br>
<a href="javascript:history.go(-1)">返回上页</a><br><a href=http://www.copathway.com/cndevforum/>访问论坛</a></p></blockquote>
<hr size=1>
<blockquote><p>
回复者:黑羽 回复日期:2003-11-20 17:52:52
<br>内容:哈哈,各位前辈干嘛那么谦虚啊,能在算法版发帖的人已经很不错了,以后还要请教你们。
<br>
<a href="javascript:history.go(-1)">返回上页</a><br><a href=http://www.copathway.com/cndevforum/>访问论坛</a></p></blockquote>
<hr size=1>
<blockquote><p>
回复者:Romantic 回复日期:2003-11-21 16:07:56
<br>内容:感谢大家这么关心我
<br>
<a href="javascript:history.go(-1)">返回上页</a><br><a href=http://www.copathway.com/cndevforum/>访问论坛</a></p></blockquote>
<hr size=1>
<blockquote><p>
回复者:lbb 回复日期:2003-11-22 18:27:19
<br>内容:我把答案放在下面,可直接运行,我试过了,数据你可以自已改动一下,你用一下:<BR>#include "stdafx.h"<BR>#include <math.h><BR>#include <stdio.h><BR><BR>double a[100];//5是数组的长度,可以自已更改<BR>double x=62.5;//给x和a[100]赋值,然后下面是主要程序<BR><BR>void binary_search(int n1,int n2)<BR>{<BR><BR> int m;<BR> if(n1>n2)<BR> {<BR> printf("error!");<BR> }<BR>else<BR>{ <BR> m=(int)((n1+n2)/2);<BR> if(a[m]==x)<BR> {<BR> printf("x在a中的位置为%d",m);<BR> }<BR> else<BR> {<BR> if((a[m]<x)&&(a[m+1]>x))<BR> {<BR> printf("x在a中的位置为%d 与 %d之间",m,m+1);<BR> }<BR> else<BR> {<BR> if(a[m]>x)<BR> { <BR> binary_search(n1,m-1);<BR> }<BR> else<BR> {<BR> binary_search(m+1,n2);<BR> }<BR> }<BR> }<BR>}<BR> }<BR><BR>void main()<BR>{<BR>int i;<BR>for(i=0;i<100;i++)<BR>{<BR> a[i]=i;<BR>}<BR>binary_search(0,99);<BR>} <BR>
<br>
<a href="javascript:history.go(-1)">返回上页</a><br><a href=http://www.copathway.com/cndevforum/>访问论坛</a></p></blockquote>
<hr size=1>
<blockquote><p>
回复者:黑羽 回复日期:2003-11-23 00:14:15
<br>内容:各位朋友,请注意,8楼的才是正确答案。这是基础算法,值得学习。
<br>
<a href="javascript:history.go(-1)">返回上页</a><br><a href=http://www.copathway.com/cndevforum/>访问论坛</a></p></blockquote>
<hr size=1>
<blockquote><p>
回复者:Romantic 回复日期:2003-11-23 16:37:08
<br>内容:谢谢11楼的这位哥哥指点~~~
<br>
<a href="javascript:history.go(-1)">返回上页</a><br><a href=http://www.copathway.com/cndevforum/>访问论坛</a></p></blockquote>
<hr size=1>
<blockquote><p>
回复者:lihp 回复日期:2004-01-10 18:45:09
<br>内容:各位都是高手,钦佩钦佩
<br>
<a href="javascript:history.go(-1)">返回上页</a><br><a href=http://www.copathway.com/cndevforum/>访问论坛</a></p></blockquote>
<hr size=1>
<blockquote><p>
回复者:rushwin 回复日期:2004-01-15 16:48:08
<br>内容:不错,是基础算法。 看的懂不是本事,要能自己写出来才是真正掌握。<BR> 偶不断努力中....
<br>
<a href="javascript:history.go(-1)">返回上页</a><br><a href=http://www.copathway.com/cndevforum/>访问论坛</a></p></blockquote>
<hr size=1>
<blockquote><p>
回复者:胡思 回复日期:2004-02-13 11:08:25
<br>内容:脑子不好使,记不住算法!拿着课本做了一下!<BR>#include <iostream><BR>using namespace std;<BR>int main(){<BR> int a[10]={0,2,8,14,15,19,24,28,35,40};<BR> int left=0,right=9,mid,x;<BR> cout<<"Input x :"<<endl;<BR> cin>>x;<BR> while(left<=right){<BR> mid=(left+right)/2;<BR> //cout<<"mid=="<<mid<<'\n';<BR> if(x==a[mid])<BR> break; <BR> else if(x>a[mid])<BR> left=mid+1;<BR> else <BR> right=mid-1;<BR> }<BR>if (left<=right)<BR> cout<< " a[ "<<mid<< "]== " << x <<endl;<BR>else<BR> cout<<" X不在数组中,小于X的最大值为: "<< a[mid-1]<<'\n'<BR> << " 大于X的最小值为: "<<a[mid] <<'\n';<BR>return 0;<BR>}<BR>2004-2-13 11:33:52
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -