您现在的位置是:C语言基础题:吃冰棍(C语言版) >>正文

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

德薄能鲜网43人已围观

简介1.题目描述。喜欢吃冰棒的机器猫。买冰棍󿼌吃完会留下一根木棒;每三根木棒可以换一根冰棒。交换的冰棒,也可以在吃完后留下一根木棒。所以,如果机器猫买了5根冰棍...

1.题目描述。


喜欢吃冰棒的机器猫。
买冰棍󿼌吃完会留下一根木棒;每三根木棒可以换一根冰棒。交换的冰棒,也可以在吃完后留下一根木棒。
所以,如果机器猫买了5根冰棍󿼌吃完后,他可以得到五根木棍;用三根木棍换一根冰棍󿀌剩下的两根木棒;吃完交换的冰棒后,手里有三根木棒,又可以换冰棍了。最后,机器猫实际上吃了7根冰棍。
机器猫想吃 几 冰棍,一开始至少要买多少根冰棍?

2.输入格式。


只有一行,正整数,表示 n。

3.输出格式。


只有一行,正整数,表示需要购买的冰棒数量。

4.输入输出样例。

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

5.说明/提示。


数据规模和协议。
对于 100% 数据,1 <n< 100000000.。

代码:

#include <stdio.h>int main() {     long long n;    scanf("%lld", &n);    long long left = 0, right = n; // 至少0个󿼌最多n根    long long result = n;    while (left <= right) {         long long mid = left + (right - left) / 2;        long long totalIceCreams = mid; // 开始购买的冰棒数量        long long sticks = mid; // 剩下的木棒吃完了        // 计算你能吃多少冰棍?        while (sticks >= 3) {             long long newIceCreams = sticks / 3;            totalIceCreams += newIceCreams;            sticks = sticks % 3 + newIceCreams; // 剩下的木棒加上新的木棒        }        if (totalIceCreams >= n) {             result = mid; // 能够满足条件,记录结果            right = mid - 1; // 尽量少点冰棒        } else {             left = mid + 1; // 需要更多的冰棒        }    }    printf("%lld\n", result);    return 0;}。

Tags:

相关文章



友情链接