DT了有木有,不知道哪里思维转不过弯,这么一个小程序改了写,写了改......
Posted on 2013年8月23日 09:48
(define (BS lst rst) (define mid (/ (+ lst rst) 2)) (if (< (- rst lst) 1) lst (if (ok mid) (BS lst mid) (BS mid rst)))) (define ans 5) (define (ok mid) (if (> mid 50) #t #f))
(define (BS lst rst) (define mid (/ (+ lst rst) 2)) (if (< (- rst lst) 1) lst (if (ok mid) (BS lst mid) (BS mid rst)))) (define ans 5) (define (ok mid) (if (> mid 50) #t #f))
//二分查找 INIT:a[] bool BinSearch(int *a,int low,int high,int target){ //a数组递增; while(low<=high){ int mid=(low+high)/2; if(a[mid]==target) return true; if(a[mid]>target) high=mid-1; else low=mid+1; } return false; } //找到一个位置使右边的数>=此位的数 INIT:arr[] int BSearchUpperBound(int arr[], int low, int high, int target){ while(low<=high){ int mid = (low+high)/2; if(arr[mid]>=target) high=mid-1; if(arr[mid]<target) low=mid+1; } return low-1; }