JavaScript趣题:缺水危机

亲爱的各位居民:

我是村长,告诉大家一个坏消息,村子最近面临缺水的问题。

这里有一份名单,上面有村民们的年龄信息。

不同的年龄段生活用水量都不同:18岁以下的大概是1升每天,1850岁以下的是2升每天,50岁及以上的是1.5升。

现在村子的水源储备有N升,为了防患于未然,求助于大家。

如果按照目前的消耗速度,我们还能维持多久?

任务来了:

写一个函数,接收2个参数,第一个是表示储备量Nwater,第二个是表示年龄列表的ageOfDwellerArray

返回代表天数的正整数,返回-1如果村子中没有居民(ageOfDwellerArray为空)。

思路:

首先,根据村长的话,做配置,分为未成年人,成年人,老年人三个层次。

var info = {
  child : {consume : 1,range : [0,18]},
  adult : {consume : 2,range : [18,50]},
  old : {consume : 1.5,range : [50,200]},
};

然后,根据年龄列表和上面的配置对象,计算每天的总消耗量。

最后,用总储备量除以每天消耗量即可算出维持的天数。

function thirstyIn(water, ageOfDwellerArray) {
  var consumePerDay = 0;
  for(var i=0;i<ageOfDwellerArray.length;i++){
    for(var j in info){
      var type = info[j];
      var range = type.range;
      if(ageOfDwellerArray[i] >= range[0] && ageOfDwellerArray[i] < range[1]){
        consumePerDay += type.consume;
        break;
      }
    }
  }
  return consumePerDay ? Math.floor(water / consumePerDay) : -1;
}
时间: 2024-10-24 23:39:36

JavaScript趣题:缺水危机的相关文章

算法趣题之回文数

题目:求用十进制.二进制.八进制表示都是回文数的所有数字中,大于十进制数10的最小值. 啥叫回文数:如果把某个十进制数按相反的顺序排列,得到的数和原来的数相同,则这个数就是"回文数".例如12321就是一个回文数. 这个题目拿Ruby.JavaScript.python.Java都很容易实现,因为这些语言都提供了字符串逆序处理的接口,或者相关其他接口,而C语言没有提供直接转换的接口,所以下面用C语言解题,其中设计的封装在工作中也会经常碰到,故记录并分享,如有错误或者有更好的算法,欢迎留

小试牛刀3之JavaScript基础题

JavaScript基础题 1.让用户输入两个数字,然后输出相加的结果. *prompt() 方法用于显示可提示用户进行输入的对话框. 语法: prompt(text,defaultText) 说明: 如果用户单击提示框的取消按钮,则返回 null.如果用户单击确认按钮,则返回输入字段当前显示的文本. 在用户点击确定按钮或取消按钮把对话框关闭之前,它将阻止用户对浏览器的所有输入.在调用 prompt() 时,将暂停对 JavaScript 代码的执行,在用户作出响应之前,不会执行下一条语句. *

序列相关的趣题 之四

(8) 给定一个英文单词,消除其中重复的字母,只能删掉字母,不能交换字母顺序,最后原单词中每个字母只出现一次,求字典序最小的结果. 这是toj一个题,百度面试也问过,原题见 http://acm.tju.edu.cn/toj/showp3257.html 此题我非常喜欢,巧妙之处是其算法是O(n)的-- .我们一个字母一个字母加入序列,一旦来了一个比较"小"的字母,因为我们需要字典顺序最小,我们希望它尽可能靠前.所以我们试图"冒泡"似的把小的往前面送,经过尾部那些较

序列相关的趣题 之二

(4)数组中找到两个数和的绝对值最小 像不像2-SUM? 不多解释,主要是绝对值大的动就行,两头扫的方法真好!当然要先排序,出去排序就是O(n),算上排序的话退化到O(nlogn) 这也是codility上的问题,还没来得及整理. 上个代码: // you can also use includes, for example: // #include <algorithm> #include <algorithm> int ab(int x) { return (x >= 0

JavaScript算法题之–随机数的生成

JavaScript算法题之–随机数的生成 需求描述:从一组有序的数据中生成一组随机并且不重复的数,类似于简单的抽奖程序的实现. 先来生成一个有序的数组: 1 var arr = [], 2     length = 100, 3     i = 0; 4   5 for( ; i < length; i++ ){ 6     arr.push( i ); 7 } 从一个长度为 100 的有序数组中随机拿出 10 个随机的数,并且不能有重复. 方法1:随机抽取法 01 var gRandomAr

uyhip 趣题 拉灯问题总有解吗?

这是一个让我纠结许久,又不甘放弃的puzzle.在一个意志力极度薄弱的下午,对不起,我看了答案...所以,这又是一篇马后炮文章.但不是所有马后炮都一文不值.如果在讲解一个解答的时候,我们不能把思考背后的动机讲清楚,于他人和自己的价值就会小很多.每一步推理的过程,每一个构造的细节,不是无迹可寻的.我希望去揭示背后的东西. 一个解答背后包含了大量的探索.解谜高手对于如何避免无效的思考,摸清靠谱的思路,总是有一套自己的办法.遗憾的是,好些同学由于各种原因,没有公开自己的方法.例如,高斯同学,他认为数学

智力趣题几则

古时一位农民被人诬陷,农民据理力争,县官因已经接受别人的贿赂,不肯放人,又找不到理由,就出了个坏主意.叫人拿来十张纸条,对农民说:“这里有十张纸条,其中有九张写的‘死’, 一张写的‘生’,你摸一张,如果是‘生’,立即放你回去,如果是‘死’,就怪你命不好,怨不得别人.”聪明的农民早已猜到纸条上写的都是“死”,无论抓哪一张都一样.于是他想了个巧妙的办法,结果死里逃生了.你知道他想的什么办法吗? 把其中的一张纸条吃下去,再根据排除法,结果就有九张死那么它吃下去的就是“生” 称苹果         有十

趣题[0]

趣题[0] 来源 17级老学长的作业题 题面 \(n\) 个物品,有两种值\(a[i]\)和\(b[i]\),给定\(k\).从中选出一些物品,使得 \(\sum{a[i]} = k * \sum{b[i]}\),并且 \(\sum{a[i]}\) 尽量大,求满足条件的最大的 \(\sum{a[i]}\). \(1 <= n.a[i].b[i] <= 100\) \(1 <= k <= 10\) 题解 做差值之后分正负做背包,然后扫一遍即可. 复杂度 \(O(100 * k * n

趣题[1]

趣题[1] 来源 http://www.csie.ntnu.edu.tw/~u91029/Sequence3.html UVA - 12192 介绍 引入 \(n*m\)的矩阵,每行从左到右递增,每列从上到下递增,在矩阵中找数\(x\)出现过的位置. 具体做法可以在这个链接ctrl+F[Search in Sorted Matrix: Saddleback Search],复杂度\(O(n+m)\) 想法 现在我们知道了,从这样的矩阵的右上角走下来可以把矩阵分成两个部分,左上部分小于\(x\),