您的位置:首页 > 编程语言

今日头条编程题 专辑问题

2016-07-24 11:38 393 查看
题目:你作为一名出道的歌手终于要出自己的第一份专辑了,你计划收录 n 首歌而且每首歌的长度都是 s 秒,每首歌必须完整地收录于一张 CD 当中。每张 CD 的容量长度都是 L 秒,而且你至少得保证同一张 CD 内相邻两首歌中间至少要隔 1 秒。为了辟邪,你决定任意一张 CD
内的歌数不能被 13 这个数字整除,那么请问你出这张专辑至少需要多少张 CD ?

思路: 首先先确定一张cd最多能放几首歌,用数学来算,假设是t首,那么t*s + t -1 = l ,所以t = (l+1) /( s+1) ;  算出一张cd包含的歌曲数量,这里要验证一下t是不是13的倍数,如果是13的倍数,每张cd的歌曲数量要减一,即  t
-= 1 ;  然后看最后是不是会剩下几首并且剩下的又恰好事13的倍数,如果是还要看一下最后剩下的和平均歌曲量是不是只差1,如果只差1就只能,把剩下的是13的倍数拆成2张cd,也就是说需要的cd数加1,如果剩下的歌曲是13的倍数但是比平均歌曲量少1个以上,则可以允一下,也就是说cd数量不用增加。

最后看实现代码:

<span style="color:#333333;">     function do_something(n, s, l){
//你的代码
var songNum = Math.floor((l+1)/(s+1)) > n ? n : Math.floor((l+1)/(s+1)) ;
if(songNum % 13 == 0){
songNum -= 1 ;
}
CDnum = Math.ceil(n/songNum) ;
if( n % songNum != 0 && (n % songNum)%13 == 0 && (n % songNum) == songNum -1){
CDnum += 1
}
console.log(CDnum);
}</span>
最后提醒一点关于牛客网的 ,上面我用return CDnum,一直说没有输出,改了console.log()才可以。原来对于js的输出就是用console.log()写到控制台。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  javascript Math