猴子吃桃

/**
 问题1:猴子吃桃
 有一只猴子第一天摘下若干个桃子,当即吃了一半,还不过瘾,有又多吃了一个,第二天早上又将剩下的桃子吃掉一半,又多吃了一个,以后每天早上都吃了前一天剩下的一半后又多吃了一个.到第10天早上再想吃的时候,只剩下一个桃子了,求第一天共摘了多少个桃子?
 
 // 答案:第1天摘了1534个,吃了768个,剩余766个
 */
- (void)houZiChiTao {
    int n = 1;
    NSLog(@"第10天剩余%d个",n);
    for (int i = 2; i <= 10; i++) {
        n = (n + 1) * 2;
        int d = 10 - i + 1;
        if(d == 1) {
            NSLog(@"第%d天摘了%d个,吃了%d个,剩余%d个",d,n,n / 2 + 1,n - (n / 2 + 1));
        } else {
             NSLog(@"第%d天剩余%d个,吃了%d个,剩余%d个",d,n,n / 2 + 1,n - (n / 2 + 1));
        }
       
    }
}
/**
 问题2:猴子吃桃
 有一只猴子第一天摘下若干个桃子,当即吃了一半,还不过瘾,有又多吃了m个,第二天早上又将剩下的桃子吃掉一半,又多吃了m个,以后每天早上都吃了前一天剩下的一半后又多吃了m个.到第n天早上再想吃的时候,只剩下一个桃子了,求一共摘了多少个桃子?
 */
// m:每天多吃多少个,n:多少天吃完
- (int)houZiChiTaoWithM:(int)m n:(int)n {
    int j = 1;
    NSLog(@"第%d天,剩余%d个桃子",n,j);
    for (int i = 2; i <= n; i++) {
       j = (j + m) * 2;
        NSLog(@"第%d,剩余%d个",n - (i - 1),j);
    }
    NSLog(@"一共有%d个",j);
    return 0;
}
// 方法2
- (void) allEatTaoWithM:(int)m n:(int)n {
   
    int  j = 1;
    for (int i = n - 1; i >= 1; i--) {
        j = 2 * (j + m);
        NSLog(@"第%d,剩余%d个",i,j);
        
    }
    NSLog(@"%d",j);
    
}
// 方法3
//用递归计算,k第几天,m每天多吃多少个,n多少天吃完只剩1个
// int d = [self houZiChiTaoWith:1 m:2 n:10];答案2556
- (int)houZiChiTaoWith:(int)k m:(int)m n:(int)n {
    int t;
    if (k == n) {
        t = 1;
    } else {
       t = 2 * ([self houZiChiTaoWith:k + 1 m:m n:n] + m);
    }
    return t;
}

你可能感兴趣的:(猴子吃桃)