百度抓取不到网站,网站生成静态页面工具,wordpress dz,完整的营销策划方案“学如逆水行舟#xff0c;不进则退。” ——《增广贤文》 目录 汽水瓶 题目#xff1a;解答分析#xff1a;js代码解答 -ACM模式#xff1a;代码通过#xff1a;题解分析#xff1a;简洁思路代码#xff1a; 汽水瓶 题目#xff1a;
某商店规定#xff1a;三个空… “学如逆水行舟不进则退。” ——《增广贤文》 目录 汽水瓶 题目解答分析js代码解答 -ACM模式代码通过题解分析简洁思路代码 汽水瓶 题目
某商店规定三个空汽水瓶可以换一瓶汽水允许向老板借空汽水瓶但是必须要归还。 小张手上有 n 个空汽水瓶她想知道自己最多可以喝到多少瓶汽水。 输入描述 本题将会给出 1T 10 组测试数据确切数字未知您需要一直读入直到特定的结尾。每组测试数据描述如下在一行上输入一个整数 n (0 n 100) 代表小张手上的空汽水瓶数量。特别地n0 代表输入结束您只需要立即退出不需要针对这种情况进行处理。 输出描述 对于每一组测试数据新起一行。输出一个整数代表小张最多可以喝到的汽水数量。 示例1 输入例子 3 10 81 0 输出例子 1 5 40 例子说明 对于第一组测试数据共有 3 个空瓶可以换 1 瓶汽水。可以证明无法再做任何兑换因此最多可以喝到 1 瓶汽水。
对于第二组测试数据
第一轮兑换共有 10 个空瓶。可以换 3 瓶汽水余下 1 个空瓶第二轮兑换刚刚余下 1 个空瓶、加上刚刚兑换的 3 瓶汽水喝完共有 4 个空瓶。可以换 1 瓶汽水余下 1 个空瓶第三轮兑换刚刚余下 1 个空瓶、加上刚刚兑换的 1 瓶汽水喝完、再找老板借 1 个空瓶共有 3 个空瓶。可以换 1 瓶汽水余下 0 个空瓶。喝完之后不要忘记归还借的空瓶。综上一共可以喝到 3115 瓶汽水。
解答分析
可以用来换的瓶子是 总瓶子 / 3 的值那么现在手里的瓶子就是 没换的瓶子余数 换来的瓶子。我们进行循环处理直到最后剩下两个瓶子的时候可以借老板一个瓶子三个瓶子换一瓶汽水喝完还给老板。而剩下的瓶子小于两瓶的话不做处理。
js代码解答 -ACM模式
不懂nodejs的readline请点击跳转 – readline模块详解【Node.js】 作者幸运小圣 const readline require(readline);const rl readline.createInterface({input:process.stdin,output:process.stdout,});function calculateBottles(val) {let totalBottles 0;while (val 3) {let newBottles Math.floor(val / 3);totalBottles newBottles;val val % 3 newBottles;}if(val 2){totalBottles 1;}return totalBottles;
}
async function processInput(){for await (const line of rl){let val Number(line);if(val 0){break;}if(val 2){console.log(calculateBottles(val));}rl.close();}
}
processInput();代码通过 题解分析
每次兑换后都会产生新的空瓶即喝掉的汽水瓶。 这些新的空瓶又可以继续兑换直到空瓶数不足以再兑换为止。 通过观察或数学归纳我们可以发现一个规律在允许借瓶的条件下最多可以喝到的汽水数量大致等于初始空瓶数的一半当n较大时这个近似更加准确。
为什么等于总瓶子除以2
这是因为每次兑换都会“消耗”3个空瓶但“产生”1瓶汽水即1个新的空瓶。从长期来看每2个空瓶加上借的1个空瓶可以“变成”1瓶汽水。因此在大量兑换的情况下最多可以喝到的汽水数量趋近于初始空瓶数的一半。
简洁思路代码
const readline require(readline);
const rl readline.createInterface({ input: process.stdin, output: process.stdout });async function processInput () {for await (const line of rl) {let val Number(line);if (val 0) {break;}let maxBottles Math.floor(val / 2);console.log(maxBottles);rl.close();}
}processInput();