zoukankan      html  css  js  c++  java
  • 寻找脚码2013年2月24日

          题目来自:《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("%d\n",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 }

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

  • 相关阅读:
    php八种常用函数
    已知二叉树的前序中序遍历,如何得到它的后序遍历?
    PTA_Have fun with numbers(C++)
    PTA_输入符号及符号个数打印沙漏(C++)
    Web安全之SQL注入
    南京邮电大学//bugkuCTF部分writeup
    修改或添加HTTP请求头
    第二次作业
    博客作业1
    linux python 串口
  • 原文地址:https://www.cnblogs.com/NeilHappy/p/2924160.html
Copyright © 2011-2022 走看看