(1)不用比较求两个数的最大最小
算法思路:Max = (a+b+|a-b|)/2 MIN =(a+b-|a-b|)/2
(2)一个猴子身带100个香蕉,他距离家50米。这个猴子要带香蕉回去,但是他一次最多只能背50个香蕉,而且,每走一米他就要吃掉一个香蕉(往 回走也要吃香蕉)。这个猴子最后最多可以带多少个香蕉到家?
算法思路:猴子必然要在半路某个地方停下来(假设这个地方离出发点x米),放下一部分香蕉并拿上x个香蕉返回出发点,拿上剩下的50个香蕉(这50个香蕉就是路程上要消耗的口粮,而在x米处剩下的香蕉就是能带回住处的香蕉个数),在这里可以列出一个方程式:(50-2x)+(50-x)<=50求得x=16即答案
(3)通过random7求random 10
算法思路:
int rand10() {
int x = 0;
do {
//do操作无视条件必然会执行一会,进行初始化操作,创造出一个[1,49]区间内的随机数
x = (rand7()-1)*7+rand7();
}while(x >= 40); //大于40的,即41~49区间的取值舍弃
return x % 10 + 1; //将该值的个位作为种子
}
网友评论