问题链接:http://vjudge.net/problem/viewProblem.action?id=18481
简单的二分查找,具体做法网上已经有很多了,我就简单叙述一下:
1,首先是二分查找:所谓二分查找,实际就是在需要查找的序列中(升序或者降序) ,每次对该序列进行对半均分为两个序列,判断需要查找的目标数 X 处于哪个序列中,更新这个序列下标成为新的查找序列,重复以上操作。
2,这里因为有三个数组L ,N, M 所以我们可以先将数组 L, N 通过加运算合并为一个数组 num[ ],目标数 X 与 M 合并为一个目标数数组 ax[ ] ,即可运用二分进行查找
下面是前辈给的二分查找代码,可放入自己的代码库,方便以后调用:
int main()
{
int x;
while(cin>>x)
{
int L,R,mid;
L=0;R=9;
while(L
=x) R=mid;
else L=mid+1;
}
if (num[L]==x){
cout<<"The x is find in "<
<
x){
R = mid-1;
}else
L = mid+1;
}
}
}
这个问题其实实现二分查找并没有让我头疼,让我比较蛋疼的是输出格式的设置。而且我也没找到有前辈用Java编写这道题目的(可能Java编写需要代码多,耗时大?我遇到的二分题目从来还没有看到有Java编写的代码)
下面是我的Java代码:
import java.util.*;
public class HDU2141_BS {
/**
* @param args
*/
static final Scanner scan=new Scanner(System.in);
static int l,n,m,s,sx,k,mid;
static int[] al;
static int[] an;
static int[] am,ax;
static int[] num;
static String st;
public void find(int start,int end,int x){ //二分查找代码
while(start
=x)end=mid;
else start=mid+1;
}
if(num[start]==x)
st="YES";
}
public static void main(String[] args) { //输出格式设置
// TODO Auto-generated method stub
int ca=1;
while(true){
k=0;
l=scan.nextInt();
n=scan.nextInt();
m=scan.nextInt();
al=new int[l];
am=new int[m];
ax=new int[m];
an=new int[n];
num=new int[l*n];
for(int i=0;i
num[k-1]||ax[i]
其实我这个代码并没有提交成功,出现了WA,但我确实没找出原因,如我有大神知道原因,希望告诉小弟一下![可怜](http://static.blog.csdn.net/xheditor/xheditor_emot/default/cute.gif)