Chinaunix首页 | 论坛 | 博客
  • 博客访问: 176921
  • 博文数量: 43
  • 博客积分: 611
  • 博客等级: 中士
  • 技术积分: 1053
  • 用 户 组: 普通用户
  • 注册时间: 2012-04-02 13:37
文章存档

2015年(3)

2013年(23)

2012年(17)

我的朋友

分类: C/C++

2013-02-26 23:37:49

     题目来自:《C语言精选名题百则技巧篇》

     问题描述:已知一个整数数组x[],其中的元素彼此都不相同,而且也已经从小到大排列好。请用比较大小,相等的方式编写一个程序,找出给定的数组中是否有一个元素满足x[i]==i(注意:在代码中是从0开始索引的,也就是x[0]是第一个数,所以对应于代码也就是x[i]==i+1)的关系。举例而言,如果x[]={-2,-1,3,7,8},x[3]=3,因此3就是答案。

     思路:利用x[]中的元素彼此都不相同而且从小到大排列,可以用二分查找法。代码很简单。


  1. #include <stdio.h>
  2.  #define MAX 1000
  3.  
  4.  //prototypes
  5.  int BinarySearch(int a[],int high,int low);
  6.  
  7.  int main()
  8.  {
  9.      int x[MAX]={-2,2,4,7,8};//x[i]=i+1;
  10.      int low=0;
  11.      int high=4;
  12.      int result=BinarySearch(x,high,low);
  13.      printf("%dn",x[result]);
  14.  }
  15.  
  16.  int BinarySearch(int a[],int high,int low)
  17.  {
  18.      while(low<=high)
  19.      {
  20.          int mid=low+(high-low)/2;
  21.          if(a[mid]==mid+1)
  22.              return mid;
  23.          else if(a[mid]>mid+1)
  24.              high=mid-1;
  25.          else
  26.              low=mid+1;
  27.      }
  28.      return -1;
  29.  }

     如果你觉得我的文章对你有帮助,请赞一下,非常感谢!

阅读(1561) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~