关于买汽水的问题

问题,一瓶汽水一元钱,每两个空瓶可以换一瓶汽水,问给你20元,能喝多少瓶汽水?

逻辑分析:

汽水数                                               空瓶数

20                                                       20(20元买的20瓶汽水喝完得20个空瓶)

10(20个空瓶换的)                         10(空瓶换的10瓶汽水喝完)

5                                                                  5

2(5个空瓶换2瓶,剩一个空瓶)    总共3个 2(刚刚换的2瓶喝完)+1(上一次换的还剩下一个)

1(3个空瓶换1瓶,剩一个空瓶)      总共2个(刚刚换的一瓶喝完和上一次剩下的一瓶)

1  (2个空瓶换的)                               0(2个空瓶正好换完)

编程实现:

void main()
{
    int x, a;                 //a表示当前空瓶能换的饮料数,x表示钱。
    scanf("%d", &x);
    int total = x;                  //total表示总的饮料数
    int battle = x;              //battle表示当前空瓶数   
    while(battle>=2)              //当空瓶只有1个或0个的时候就无法继续换饮料则跳出循环
    {
        
        if(battle%2==0)   //当为双数空瓶时
        {
            a = battle / 2;          //当前空瓶能换的饮料为空瓶数的一半。
            battle = battle / 2;   //空瓶换了以后更新现有空瓶数。
           total=total+a;           //换了饮料以后记得更新总的饮料数
        }
        
        if (battle % 2 != 0)   //当为单数空瓶时

{
            a = battle / 2;        //当前空瓶能换的饮料为空瓶数的一半(为奇数时也是一半)
            battle = battle / 2 + 1;  //这里需要注意,当空瓶为单数时,还剩的空瓶数为当前除以2加1,因为这里两个整型相除还是整型,如5/2结果是2,但实际还有1个瓶子没有换,所有这里剩余的瓶子应该是battle/2+1。
            total=total+a;   //更新总数
        }
    }
    printf("%d",total);
}

这里还有更优化的写法,不用区别单数空瓶和双数空瓶

 total=total+battle / 2;
 battle=battle/2+battle%2;

可以参考理解一下。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值