编程珠玑 第4章 习题

1. 采用循环的方式时,判断low<=high就可以确定low和high的下标不会越界,至于除数是0本题不可能出现这个情况。

2.#include <iostream>
using std::cout;
using std::endl;


int binarySearchFirst(int a[] , int size , int t){
if(size<=0)
return -1;
int low=0, high=size-1;
while(low<=high){
int mid =(low+high)/2;
if(a[mid] < t )
low = mid +1;
else if(a[mid] > t)
high = mid -1;
else{
while(mid>=low && a[mid]==t)
mid--;
return mid+1+1;   //因为要输出在数组中第几个数,而不是数组中的下标
}
}
return -1;
}


void main(){
int a[]={1,2,2,3,3,3,3,4,5,6,7,7,8,9,9,9,12};
cout<<binarySearchFirst(a,sizeof(a)/sizeof(int),7)<<endl;;
}

3.int binarySearch(int a[] , int low, int high , int find){
if(low > high)
return -1;
int mid = (low+high)/2;
if(a[mid]==find)
return mid+1;
else if(a[mid]<find)
return binarySearch(a,mid+1,high,find);
else
return binarySearch(a,low,mid-1,find);
}

4.“计时变量”,其实就是一个unsigned int的整数,初始化为0,循环每执行一次就加1.循环结束为其统计值。题目的意思好像是根据实验结果,来推测是对数分布

5. 就只能推断出,x最终一定会在某一步取得5这个值,具体的......我也不会。

6. 最终留在罐中的豆子 颜色与白色豆子的数量有关。当每次取得是两个白色的豆子时,被丢弃换成了黑色的豆子,白色豆子的数量减少2个;如果取得的是1白1黑,则黑色豆子被丢弃,白色被放回,白色豆子的数量没有变。假设只考虑白色豆子的数量,如果想改变白色豆子的数量,就必须同时取出两个白色的豆子。如果白色的豆子时奇数,则经过若干次取出2个白色豆子的操作之后,最终还会剩下1个白色豆子和若干黑色豆子,白色豆子不可能再减少了;若还剩下两个白色的豆子和若干黑色的豆子,要想最终只剩下一个豆子,则只能是黑色,因为两个白色要不然同时被丢弃,要不然同时留下。

7. 类似于二分搜索,y0到yn-1在x确定之后都有相应的值,且他们是有序的。代码稍后写在另一篇博客中。

8.暂时没有想到。





  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值