吉安知名网站建设,企业小程序建设公司,徐州免费建站,广州十大猎头公司排名1.题目描述 机器猫喜欢吃冰棍。 买一根冰棍#xff0c;吃完了会剩一个木棒;每三个木棒可以兑换一个冰棍。兑换出来的冰棍#xff0c;吃完之后也能剩下一个木棒。 所以#xff0c;如果机器猫买了5根冰棍#xff0c;他可以吃完之后得到5个木棒;拿3个木棒兑换1根冰棍#xff…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. 代码
#include stdio.hint 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;
}