当前位置:   article > 正文

C语言基础题:吃冰棍(C语言版)

C语言基础题:吃冰棍(C语言版)

1.题目描述


机器猫喜欢吃冰棍。
买一根冰棍,吃完了会剩一个木棒;每三个木棒可以兑换一个冰棍。兑换出来的冰棍,吃完之后也能剩下一个木棒。
所以,如果机器猫买了5根冰棍,他可以吃完之后得到5个木棒;拿3个木棒兑换1根冰棍,余2个木棒;吃完兑换来的冰棍之后,手上有3个木棒,又能兑换一个冰棍。最后,机器猫实际上吃了7个冰棍。
机器猫想要吃到 几 个冰棍,想问最开始至少需要去买多少根冰棍?

2.输入格式


仅一行,一个正整数,表示 n。

3.输出格式


仅一行,一个正整数,表示需要买的冰棍数量。

4.输入输出样例

输入1:
7
输出1:
5
输入2:
20
输出2:
14

5.说明/提示


数据规模与约定
对于 100% 的数据,1 <n< 100000000.

代码:

  1. #include <stdio.h>
  2. int main() {
  3. long long n;
  4. scanf("%lld", &n);
  5. long long left = 0, right = n; // 最少0根,最多n根
  6. long long result = n;
  7. while (left <= right) {
  8. long long mid = left + (right - left) / 2;
  9. long long totalIceCreams = mid; // 起始购买的冰棍数量
  10. long long sticks = mid; // 吃完后剩下的木棒
  11. // 计算可以吃到多少冰棍
  12. while (sticks >= 3) {
  13. long long newIceCreams = sticks / 3;
  14. totalIceCreams += newIceCreams;
  15. sticks = sticks % 3 + newIceCreams; // 剩下的木棒加上新的木棒
  16. }
  17. if (totalIceCreams >= n) {
  18. result = mid; // 可以满足条件,记录结果
  19. right = mid - 1; // 尝试更少的冰棍
  20. } else {
  21. left = mid + 1; // 需要更多的冰棍
  22. }
  23. }
  24. printf("%lld\n", result);
  25. return 0;
  26. }

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/酷酷是懒虫/article/detail/945239
推荐阅读
相关标签
  

闽ICP备14008679号