美文网首页程序员
搜狐2017笔试题:包裹运输

搜狐2017笔试题:包裹运输

作者: Switchhh | 来源:发表于2018-08-20 11:13 被阅读12次

审题要清晰,很多人没有看到“高度相同”当成了立方体,结果做起来就更加复杂了。
设从大到小对应需要包装盒的数量分别为n6、n5、n4、n3、n2、n1,总数ans。

6 * 6直接加到总数里
5 * 5可以用11个1 * 1填充

每有一个n5就需要n1 – 11,如果n1减为负数,不需要理会,所以剩余的n1数量为n1 – 11 * n5。

4 * 4可以用5个2 * 2填充

每有一个n4优先用2*2填充那么剩余的n2数量为n2 – 5 * n4
这里需要关注一下n2的值,这里即便n2减成负的了也不影响计算,用n1填充n2的负值(就是把n2没填满的部分用n1填上)

3 * 3的比较复杂四个为一组,多出来的需要进行填充

下面是凑不成四个一组的四种情况,判断一下然后根据条件执行:

3个3 * 3
需要1个2 * 2 + 5个1*1填充
2个3 * 3
需要3个2 * 2 + 6个1*1填充
1个3 * 3
需要5个2 * 2 + 7个1 * 1填充
0个3 * 3

最后是2 * 2和1 * 1盒子

2 * 2
1 * 1

根据条件可以将n2和n1合并计算n1 + 4 * n2,填满6 * 6的36个位置,代码如下:

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>包裹运输</title>
</head>
<body>
    <textarea id="inp"></textarea>
    <button id="btn" onclick="print()">提交</button>
    <script type="text/javascript">
        function print(){
            var all = document.getElementById('inp').value;
            var lines = all.split("\n");
            for(var i=0;i<lines.length;i++){
                var str = lines[i].split(" ");
                var n1 = parseInt(str[0]);
                var n2 = parseInt(str[1]);
                var n3 = parseInt(str[2]);
                var n4 = parseInt(str[3]);
                var n5 = parseInt(str[4]);
                var n6 = parseInt(str[5]);
                var ans = 0;
                ans = (n6 + n5 + n4 + parseInt(n3/4));//算出6*6 5*5 4*4 3*3所占的盒子数量
                n1 = n1 - (11 * n5);     //填补5*5后剩余的1*1数量
                n2 = n2 - (5 * n4);      //填补4*4后剩余的2*2数量,可以为负,负即被1*1填补
                if(n3%4){
                    ans++;   //根据四个一组外多余数量的3*3盒子进行填充
                    switch(n3%4)
                    {
                    case 1:
                      n2 = n2 - 5;
                      n1 = n1 - 7;
                      break;
                    case 2:
                      n2 = n2 - 3;
                      n1 = n1 - 6;
                      break;
                    case 2:
                      n2 = n2 - 1;
                      n1 = n1 - 5;
                      break;
                    }
                }
                if(n1 < 0){
                    n1 = 0;
                }
                if( n1 + 4*n2 > 0 ){
                    //如果所有都填补完还剩余1*1 2*2盒子,则计算2*2 1*1所需的包装盒
                    ans += (parseInt((n1 + 4*n2)/36)+1);
                }
                console.log(ans);
            }
        }
    </script>
</body>
</html>

相关文章

  • 搜狐2017笔试题:包裹运输

    审题要清晰,很多人没有看到“高度相同”当成了立方体,结果做起来就更加复杂了。设从大到小对应需要包装盒的数量分别为n...

  • [36]包裹运输-搜狐2018秋

    1.题目描述 工厂生产的产品包装在相同高度h,尺寸为11,22,33,44,55,66的方形包装中。这些产品始终以...

  • prpc开发日志-20210405

    PRPC2.0.0设计文档 1,相关概念 整体理解视角:模拟快递运输,将整个过程比喻成包裹运输,包括,包裹的登记,...

  • 程序员进阶之算法练习(九)附两道扩展题答案

    前言 在上文程序员进阶之算法练习(八)附两道搜狐笔试题中,在搜狐笔试题的基础上稍微改编后的题目: 《宝石二》 有一...

  • 搜狐校招笔试题非技术类【4.5】

    搜狐校招笔试题 昨儿被搜狐笔试安利了一把简书,于是就下载了,第一篇就献给搜狐校招吧@_@,仅回忆......错了勿...

  • 程序员进阶之算法练习(八)附两道搜狐笔试题

    前言 前面讲了那么多算法的重要性。口说无凭,这次带上两道搜狐今年的笔试题。这里先附上两道搜狐题目的大意:题目一:《...

  • 警惕“物传人”

    何谓“物传人”?即快递包裹携带的病毒感染人!包裹怎样成为感染的媒介?专家说,本来物传人的机率不大!只是由于在运输装...

  • 2018-10-17测试

    搜狐博客首页-搜狐 搜狐博客首页-搜狐 搜狐博客首页-搜狐 搜狐博客首页-搜狐 搜狐博客首页-搜狐 搜狐博客首页-...

  • 国内一线互联网公司内部面试题库

    国内一线互联网公司内部面试题库 面试题来自于百度、小米、乐视、美团、58、猎豹、360、新浪、搜狐内部题库 熟悉本...

  • 国内一线互联网公司内部面试题

    国内一线互联网公司内部面试题库 面试题来自于百度、小米、乐视、美团、58、猎豹、360、新浪、搜狐内部题库 熟悉本...

网友评论

    本文标题:搜狐2017笔试题:包裹运输

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