三个空瓶换一瓶

本文介绍了一种关于商店促销活动中饮料兑换的算法。通过递归计算购买特定数量饮料后最终能够消费的饮料总数,以此来确定为了满足N个人的需求至少需要购买多少瓶饮料。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

问题:商店促销饮料,三个空瓶可以换取一瓶,现在有n个人,一共需要购买多少瓶?

思想:一共n个人,就先买n瓶,买n瓶可以获得最后能喝多少(result)瓶;如果result>n,则继续计算买n-1瓶最后能喝多少瓶,…一直计算到result < n,这时候假如是购买a瓶的时候,则购买a+1瓶才够n个人喝;
分两步实现:

第一步:递归出买b瓶最后能喝多少瓶(result);
第二步:判断第一步计算的result与总人数(n)的关系

@property(assign, nonatomic) NSInteger result;

#pragma 一共N个人,返回需要购买的瓶数
-(NSInteger)personCount:(NSInteger)personCount{
    //一共N个人,返回需要购买的瓶数
    for (NSInteger i = personCount; i > 0; i --) {
        self.result = i;
        [self buyCount:self.result];
        if (self.result < personCount) {
            self.result = i + 1;
            [self buyCount:self.result];
            personCount = i + 1;
            return i + 1;
        }
    }
    return personCount;
}
#pragma 购买n瓶,返回最后能喝多少瓶
-(NSInteger)buyCount:(NSInteger)buyCount{
    //购买n瓶,返回最后能喝多少瓶
    NSInteger b = buyCount / self.result;
    NSInteger c = buyCount % result;
    if (b > result) {
        self.result += b;
        [self buyCount:b + c];
    }
    self.result += b;
    return self.result;

}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值