今日头条编程题 专辑问题

题目:你作为一名出道的歌手终于要出自己的第一份专辑了,你计划收录 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()写到控制台。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值