小练习

本文探讨了一个经典的数学问题——利用有限的资金如何最大化汽水的饮用数量,并提供了两种解决方案:一种是使用循环结构进行迭代计算;另一种是采用递归函数逐步求解。最终,通过观察大量计算结果发现了一个简洁的公式,即购买的汽水数量等于资金数额的两倍减一。

喝汽水,1瓶汽水1元,2个空瓶可以换一瓶汽水,给20元,可以多少汽水。编程实现。

#include<stdio.h>
int main(void)
{
   int money = 20;
   int totol = money;
   int empty = money;
   while(empty>1)
   {
      totol += totol + empty/2;
      empty = empty/2 + empty%2;
   } 
   printf("%d\n",totol);
return 0;
}

最近学了函数的递归,顺便用递归解决一下,这里只写函数

int getNumber(int n)
{
   if(n ==1)
      {
      return 1;
      }
    else if(n >=2 && n % 2 == 0 )
    {
      return n + getNumber(n/2);
      }
     else if(n >=2 &&  n % 2 !=0)
     {
     return n + 1 + getNumber(n/2);
     }   
}

当然我们从大量的结果发现,喝的水是钱数的二倍减一,所以可以简化成:

totol = money * 2 - 1;

这其实就是一种算法,把复杂的问题通过分析,找出规律。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值