【华为机试】汽水瓶

作者: 公子七 | 来源:发表于2017-08-14 11:11 被阅读42次

题目描述
某商店规定:三个空汽水瓶可以换一瓶汽水。小张手上有十个空汽水瓶,她最多可以换多少瓶汽水喝?
答案是5瓶,方法如下:先用9个空瓶子换3瓶汽水,喝掉3瓶满的,喝完以后4个空瓶子,用3个再换一瓶,喝掉这瓶满的,这时候剩2个空瓶子。然后你让老板先借给你一瓶汽水,喝掉这瓶满的,喝完以后用3个空瓶子换一瓶满的还给老板。如果小张手上有n个空汽水瓶,最多可以换多少瓶汽水喝?
输入描述

输入文件最多包含10组测试数据,每个数据占一行,仅包含一个正整数n(1<=n<=100),表示小张手上的空汽水瓶数。n=0表示输入结束,你的程序不应当处理这一行。
e.g.
3
10
81
0

输出描述

对于每组测试数据,输出一行,表示最多可以喝的汽水瓶数。如果一瓶也喝不到,输出0。
e.g.
1
5
40

题解

// 递归
var readline = require('readline');
var rl = readline.createInterface({
  input: process.stdin,
  output: process.stdout
});
rl.on('line', function(input) {
  var num = parseInt(input.trim());
  var sum = 0;
  changeBot(num, sum);
});
function changeBot (num, sum) {
  if  (num == 2) {
    console.log(sum + 1);
    return;
  }
  if (num == 1 || num == 0) {
    console.log(sum);
    return;
  }
  sum += Math.floor(num / 3);
  num = num % 3 + Math.floor(num / 3);
  changeBot(num, sum);  
}

// 非递归
var readline = require('readline');
var rl = readline.createInterface({
  input: process.stdin,
  output: process.stdout
});
 
rl.on('line', function (input) {
  var num = parseInt(input.trim());
  var sum = 0;
  console.log(changeBot(num, sum));
});
function changeBot (num, sum) {
  while (num >= 2) {
    if (num == 2) {
      sum++;
      break;
    } else {
      sum += Math.floor(num / 3);
      num = num % 3 + Math.floor(num / 3);
    }
  }
  return sum;
}

// 大神的做法
var readline = require('readline');
var rl = readline.createInterface({
  input: process.stdin,
  output: process.stdout
});
rl.on('line', function (input) {
  var num = parseInt(input.trim());
  console.log(Math.floor(num / 2));
});

Tips:在JS中,/并不能取整,取整需利用Math.floor()

相关文章

  • 【华为机试】汽水瓶

    题目描述某商店规定:三个空汽水瓶可以换一瓶汽水。小张手上有十个空汽水瓶,她最多可以换多少瓶汽水喝?答案是5瓶,方法...

  • 华为机试2017

    简易压缩算法:将全部由小写英文字母组成的字符串,将其中连续超过两个相同字母的部分压缩为整个连续个数加该字母,其他部...

  • 实习机试-华为

    昨晚收到面试邀请后就开始临阵磨枪,加上今天总共在剑指offer上刷了十几道题吧。晚上参加华为的机试,2个小时3个题...

  • 1.27 华为上机测试题汽水瓶

    title: 华为软件笔试---汽水瓶编程localimage: image1urlname: huawei-qi...

  • 【华为机试】质数因子

    题目描述: 功能:输入一个正整数,按照从小到大的顺序输出它的所有质数的因子 输入描述: 输入一个long型整数 输...

  • 【华为机试】进制转换

    题目描述: 写出一个程序,接受一个十六进制的数值字符串,输出该数值的十进制字符串。(多组同时输入 ) 输入描述: ...

  • 【华为机试】数字颠倒

    题目描述: 输入一个整数,将这个整数以字符串的形式逆序输出。程序不考虑负数的情况,若数字含有0,则逆序形式也含有0...

  • 【华为机试】句子逆序

    题目描述: 将一个英文语句以单词为单位逆序排放。例如“I am a boy”,逆序排放后为“boy a am I”...

  • 【华为机试】字符逆序

    题目描述: 将一个字符串str的内容颠倒过来,并输出。str的长度不超过100个字符。 如:输入“I am a s...

  • 【华为机试】简单密码

    题目描述: 密码是我们生活中非常重要的东东,我们的那么一点不能说的秘密就全靠它了。哇哈哈. 接下来渊子要在密码之上...

网友评论

    本文标题:【华为机试】汽水瓶

    本文链接:https://www.haomeiwen.com/subject/kwwyrxtx.html