本题将会给出
组测试数据,确切数字未知,您需要一直读入直到特定的结尾;您也可以参考 牛客网在线判题系统使用帮助 获得更多的使用帮助。每组测试数据描述如下:
在一行上输入一个整数
,代表小张手上的空汽水瓶数量。特别地,
代表输入结束,您只需要立即退出,不需要针对这种情况进行处理。
对于每一组测试数据,新起一行。输出一个整数,代表小张最多可以喝到的汽水数量。
3 10 81 0
1 5 40
对于第一组测试数据,共有
个空瓶,可以换
瓶汽水。可以证明无法再做任何兑换,因此最多可以喝到
瓶汽水。
对于第二组测试数据:
第一轮兑换,共有
个空瓶。可以换
瓶汽水,余下
个空瓶;
第二轮兑换,刚刚余下
个空瓶、加上刚刚兑换的
瓶汽水喝完,共有
个空瓶。可以换
瓶汽水,余下
个空瓶;
第三轮兑换,刚刚余下
个空瓶、加上刚刚兑换的
瓶汽水喝完、再找老板借
个空瓶,共有
个空瓶。可以换
瓶汽水,余下
个空瓶。喝完之后不要忘记归还借的空瓶。
综上,一共可以喝到
瓶汽水。
const rl = require("readline").createInterface({ input: process.stdin });
var iter = rl[Symbol.asyncIterator]();
const readline = async () => (await iter.next()).value;
void async function () {
// Write your code here
while(line = await readline()){
if (line == '0') continue;
console.log(Number(line) >> 1);
}
}() const readline = require("readline");
const rl = readline.createInterface({
input: process.stdin,
output: process.stdout,
});
const lines = [];
rl.on("line", function (line) {
if (line === "0") {
return;
}
const f = parseInt(line);
let count = 0;
let drink = Math.floor(f / 3); // 换
let rest = f % 3; // 余下几瓶
count = count + drink;
while (drink > 0) {
const temp1 = Math.floor((drink + rest) / 3);
const rest1 = (drink + rest) % 3;
count = count + temp1;
drink = temp1;
rest = rest1;
// 加入借的场景
if (temp1 === 0 && rest1 === 2) {
count++;
}
}
console.log(count);
});SB解法
const readline = require("readline");
const rl = readline.createInterface({
input: process.stdin,
output: process.stdout,
});
let list = [];
rl.on("line", function (line) {
list.push(line);
});
rl.on("close", function (line) {
for (let i = 0; i < list.length; i++) {
let num = 0;
let d = parseInt(list[i]);
if (d === 0) {
break;
}
if (d < 2) {
console.log(0);
} else {
num = fn(d, num);
}
console.log(num);
}
});
function fn(d, num) {
let y = d % 3;
let s = parseInt(d / 3);
num = num + s;
if (s + y > 2) {
let newst = y + s;
num = fn(newst, num);
return num;
} else if (s + y == 2) {
num = num + 1;
return num;
} else {
return num;
}
}
//方法1: 直接用数学方法分析,别问,我也是看题解才想明白的
while(line = parseInt(readline())){
console.log(Math.floor(line / 2))
}
//方法2: 递归
var arr = [];
//这个判断会自动帮我们把最后用于结束的 0 给省略
while(line = parseInt(readline())){
arr.push(line);
}
//工具函数
var recursion = (n) => {
let res = 0;
//拥有的空瓶大于3,就可以进行操作
while(n >= 3){
//先正常换,每次把换到的汽水记录到res
res += Math.floor(n / 3);
//每次换完之后,重新维护空瓶数n,进行下一轮换汽水
n = Math.floor(n / 3) + n % 3;
}
//空汽水瓶为2时,才需要借一个,少了(n == 1)还不起,多了(n >= 3)没必要借
if(n == 2) n++;
return res;
}
//依次输出答案
for(let n of arr){
console.log(recursion(n))
}
let n = parseInt(readline());
let sum = 0;
function fn1(n) {
let a = Math.floor(n / 3);//每次能换的瓶数
sum += a;//换的瓶数总和
n = a + n % 3;//更新空瓶数
if (n > 2) {//若空瓶数大于2 函数继续执行
return fn1(n);
} else if (n === 2) {//若空瓶数等于2 借老板一瓶,即又换了一瓶(sum+1),最后三空瓶还给老板,函数结束
return sum += 1
} else {//若空瓶小于2,则返回sum,函数结束
return sum
}
}
console.log(fn1(n));
var line;
while(line = readline()){
var lines = line.split('\n');
var n = parseInt(lines[0]);
function change(n){
var exnum = 3;
var soda = 0;
var back = 0;
if(n == 0){
soda = 0;
}
while(n >= exnum){
back = Math.floor(n/exnum);
n = n%exnum+back;
soda+=back;
}
if(n == exnum-1){
var borrow = 1;
soda = soda+borrow;
}
return soda;
}
print(change(n));
}
let indata =[];
while(line = readline())
{
if(line == 0) {break;}
indata.push(line);
}
var foo=function(){
let out=[];
for(let i of indata){
let s=i,t=0;
while( s >= 3){
t = t + Math.floor( s/3);
s = s%3 + Math.floor( s/3);
}
if(s == 2) {t+=1};
print(t);
}
}
foo() while(line = readline()){
console.log(Math.ceil((Number(line)-1)/2))
} var readline = require('readline');
var rl = readline.createInterface({
input: process.stdin,
output: process.stdout
});
rl.on('line', function (input) {
if(input !== '0'){
let left = Number(input)
let result = 0
while(left >= 3){
const newBottles = Math.floor(left/3)
result += newBottles
left = left % 3 + newBottles
}
if(left === 2) result++
console.log(result)
}
}); let line;
while(line = readline()) {
print (Math.floor(line / 2));
} 顺便问一下究竟js该怎么处理牛客的acm模式的stdio,readline方法没太折腾明白,人已经傻了var readline = require('readline')
const rl = readline.createInterface({
input: process.stdin,
output: process.stdout
})
var count = 0
rl.on('line', (line) => {
line = parseInt(line)
if(line === 0) return
while(line > 1) {
var temp = parseInt(line/3)
count += temp
line = temp + line % 3
if(line === 2){
line += 1
}
}
console.log(count)
})
问什么这样写,输出结果不对,在浏览器下测试没有问题啊const getRes = function(n,z){
let s = Math.floor(n/3)//此次能换的瓶子
z = z + s //res
let y = n%3 + s//剩余的瓶子
if(y > 3){
return getRes(y,z)
}else if(y >=2){
return z+1
}else{
return z
}
}
let n
while(n=readline()){
if(n===0){ break }//如果输入0 终止程序
n=Number(n)
console.log(getRes(n,0))
}