笔试编程题整理

发布于 2022-06-14 14:18:16 字数 11917 浏览 1039 评论 0

题目描述

代码:

function fib(n, current = 1, next = 1) {
    if(n == 1) return current;
    if(n == 2) return next;
    return fib(n -1, next, current + next);
}

function F(n) {
    if(n == 1) return 0;
    if(n == 0) return 0;
    let sum = 1;
    let i = 2;
    let caches;
    while(n > sum) {
        caches = fib(i++);
        sum += caches;
    }

    return sum - caches;
}

题目描述

样例

输入:[0, 1, 0, 2, 1, 0, 1, 3, 2, 1, 2, 1]
输出:6

代码:

function getVolumn(input){
 var arr= input.map(item=>+item)
 var max= Math.max.apply(null,arr);
 var result=0;
 for(var i=0; i< max;i++){
  var tmpArr = arr.map(item=>item >= i + 1 ? 1: 0); // 逐层记录水位
  var tmp = tmpArr.join('').match(/10+(?=1)/g); // match(/10+1/g)问题:对于连续的 10101 会漏掉一个水位
  if (tmp) {
   tmp.map(item=>result+= item.length-1); // tmp.map(item=>result+= item.length-2);
  }
 };
 return result;
}

正则表达式 零宽断言

零宽断言就是下结论,例如 ab,正则:a(?=b),匹配 a 并且向右看是 b,得到的结果是 a,断言不会在匹配的内容当中,如果是 a(?=c),则匹配不到任何内容,因为匹配 a 以后向右看并不是 c。另外,零宽断言分两种:前瞻(Lookahead)和后顾(Lookbehind),但 JavaScript 只支持前瞻。

前瞻表达式的语法如下:

表达式说明
m(?=n)匹配后面紧接 n 的字符串 m
m(?!n)匹配后面没有紧接 n 的字符串 m

题目描述

代码:

var input = parseInt(read_line())
arr = []

function main(n) {
    if (n == 0)
        return
    if (n % 2 == 1) {
        arr.push('2')
        main((n - 1) / 2)
    } else {
        arr.push('3')
        main(n / 2 - 1)
    }
}

main(input)
print(arr.reverse().join(''))

题目描述

给出html、css代码如下:

<!DOCTYPE html>
<html lang="en">

<head>
    <meta charset="UTF-8">
    <title>Title</title>
    <style>
    body,
    html {
        margin: 0;
    }

    table {
        border-collapse: collapse;
        table-layout: fixed;
        margin: 10px auto;
    }

    td {
        border: 1px solid #E1E1E1;
        padding: 0;
        width: 30px;
        height: 30px;
        cursor: pointer;
    }

    .current {
        background: #1D2088;
    }

    .wrap {
        background: #00A0E9;
    }
    </style>
</head>

<body>
    <table id="jsLayout">
        <tbody>
            <tr>
                <td class="current"></td>
                <td class="wrap"></td>
                <td></td>
                <td></td>
                <td></td>
                <td></td>
                <td></td>
                <td></td>
                <td></td>
                <td></td>
            </tr>
            <tr>
                <td class="wrap"></td>
                <td class="wrap"></td>
                <td></td>
                <td></td>
                <td></td>
                <td></td>
                <td></td>
                <td></td>
                <td></td>
                <td></td>
            </tr>
            <tr>
                <td></td>
                <td></td>
                <td></td>
                <td></td>
                <td></td>
                <td></td>
                <td></td>
                <td></td>
                <td></td>
                <td></td>
            </tr>
            <tr>
                <td></td>
                <td></td>
                <td></td>
                <td></td>
                <td></td>
                <td></td>
                <td></td>
                <td></td>
                <td></td>
                <td></td>
            </tr>
            <tr>
                <td></td>
                <td></td>
                <td></td>
                <td></td>
                <td></td>
                <td></td>
                <td></td>
                <td></td>
                <td></td>
                <td></td>
            </tr>
            <tr>
                <td></td>
                <td></td>
                <td></td>
                <td></td>
                <td></td>
                <td></td>
                <td></td>
                <td></td>
                <td></td>
                <td></td>
            </tr>
            <tr>
                <td></td>
                <td></td>
                <td></td>
                <td></td>
                <td></td>
                <td></td>
                <td></td>
                <td></td>
                <td></td>
                <td></td>
            </tr>
            <tr>
                <td></td>
                <td></td>
                <td></td>
                <td></td>
                <td></td>
                <td></td>
                <td></td>
                <td></td>
                <td></td>
                <td></td>
            </tr>
            <tr>
                <td></td>
                <td></td>
                <td></td>
                <td></td>
                <td></td>
                <td></td>
                <td></td>
                <td></td>
                <td></td>
                <td></td>
            </tr>
            <tr>
                <td></td>
                <td></td>
                <td></td>
                <td></td>
                <td></td>
                <td></td>
                <td></td>
                <td></td>
                <td></td>
                <td></td>
            </tr>
        </tbody>
    </table>
    <script>
		// your code
    </script>
</body>

解答:

function bind() {
    var row = document.querySelectorAll('tr'); // var row = document.getElementByTagName('tr');
    var rowNum = row.length;
    var colNum = row[0].children.length;
    for(let i = 0; i < rowNum; i++) {
        for(let j = 0; j < colNum; j++) {
            var currentNode = row[i].children[j];
			 
	   // 循环中有异步操作 将导致闭包 这里解决办法使用 let ;还有两种解决办法见 <https://developer.mozilla.org/zh-CN/docs/Web/JavaScript/Closures>
            currentNode.addEventListener('click', function (e) {
                var currentRowIndex = i;
                var currentColIndex = j;
                for(var x = 0; x < rowNum; x++) {
                    for(var y = 0; y < colNum; y++) {
                        var node = row[x].children[y];
                        node.className = '';
                        if((currentRowIndex - x <= 1) && (currentRowIndex - x >= -1)
                            && (currentColIndex - y <= 1) && (currentColIndex - y >= -1)) {
                            row[x].children[y].className = 'wrap';
                        }
                    }
                }
                row[i].children[j].className = 'current';
                // currentNode.className = 'current'; 
                // 闭包导致这里会有问题;除非声明时使用 let currentNode
            });
        }
    }
}

bind()

题目描述

代码:

function box(arr) {
    let num = 0;
    while(arr.length) {
        [...new Set(arr)].map((item, index) => {
            arr.splice(arr.indexOf(item), 1);
        });
        num++;
    }
    return num;
}

题目描述

代码:

/**
* 班级不同,直接对班级顺序升序
* 否则,对分数进行升序
* return 0 表示相对位置不变
*/
function studentSort(arr) {
    arr.sort(compareFun);

    function compareFun(a, b) {
        let classDiff = a.class - b.class;
        let scoreDiff = a.score - b.score;
        if(classDiff !== 0) return classDiff;
        return scoreDiff;
    }
    return arr;
}

假设屏幕宽度足够, body 里生成 100 个 div, 每个 div 宽 100px,高 100px, 按红、黄、蓝、绿交替变色,10 行 10 列排列。

<!DOCTYPE html>
<html>

<head>
    <title></title>
</head>
<style>
* {
    margin: 0;
    padding: 0;
}

body {
    width: 1000px;
    display: flex;
    flex-wrap: wrap; /* 换行 */
}

.item {
    width: 100px;
    height: 100px;
    display: inline-flex;
    background-color: blue;
}

.item:nth-of-type(3n+1) { /* 注意和nth-child的区别 */
    background-color: red;
}

.item:nth-of-type(3n+2) {
    background-color: yellow;
}
</style>

<body>
</body>
<script>
var fragment = document.createDocumentFragment();
for(let i = 0; i < 100; i++) {
    let div = document.createElement('div');
    div.className = 'item';
    div.innerHTML = i + 1;
    fragment.appendChild(div);
}
document.body.appendChild(fragment);
// Object.keys(Array(100).fill(0)).map((item, index) => {
//     let div = document.createElement('div');
//     div.className = 'item';
//     fragment.appendChild(div);
// });
</script>

</html>

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。
列表为空,暂无数据

关于作者

JSmiles

生命进入颠沛而奔忙的本质状态,并将以不断告别和相遇的陈旧方式继续下去。

0 文章
0 评论
84960 人气
更多

推荐作者

留蓝

文章 0 评论 0

18790681156

文章 0 评论 0

zach7772

文章 0 评论 0

Wini

文章 0 评论 0

ayeshaaroy

文章 0 评论 0

初雪

文章 0 评论 0

    我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
    原文