题目一

用js实现一个用户行收集器,功能如下:
1,收集用户在页面中的所有click行为,并使用log方法发送日志,包含触发事件的节点xpath信息
2,xpath需包含tagName、id、class、同级同名节点索引(从1开始),如

<body>
<div id=“container”>
<p>something</p>
<a id=“link1” class=“link-class”></a>
<a id=“link2” class=“link-class current”>target link</a>
</div> 
</body>

点击target link时,xpath为 body[1]/div[1][@id=“container”]/a[2][@id=“link2”][contains(@class, “link-class")][contains(@class, “current")]
3,不侵入、不影响其他业务代码的执行

var obody=document.getElementsByTagName('body')[0];
    obody.addEventListener('click',function(e){
        console.log('1');
        console.log(getXPath(e.target));

    })

    function getXPath(target){
        if(target.nodeName=='BODY') return 'body[1]';
        var index=1;
        var str='';
        var tempTarget=target;
        var nodeName=target.nodeName;
        var id=target.id;
        var classList=target.classList;
        while(tempTarget.previousElementSilblig!=null){
            if(tempTarget.previousElementSilbling.nodeName==nodeName){
                index++;
                console.log(index);
            }
            tempTarget=tempTarget.previousElementSilblig;
        }

        str='/'+nodeName.toLowerCase()+'['+index+']';
        if(id){
            str+='[@id="'+id+'"]';
        }
        classList.forEach(function(ele,index,self){
            str+='[contains(@class,"'+ele+'")]';
        })
        return getXPath(target.parentNode)+str;
    }

题目二

小明要为n个人计划一次火星的探险,其中一个重要的任务是为每个参与者安排食物。仓库里面有m个能用一天的食物包裹,每个食物包裹有不同的类型ai。
每个人每天必须用且只能用一个食物包裹。由于某些原因,在整个过程中,每个人只能用同一种类型的食物包裹,但是不同的人用的食物包裹可以不一样。
给出人数以及食物包裹的情况,请你求出这趟探险最多可以持续多少天。

#include<iostream>
#include<vector>
#include<algorithm>
using namespace std;

int main(){
    int n=0;
    int m=0;
    cin>>n>>m;
    vector<int> a;
    int k=0;
    for(int i=0;i<m;i++){
        cin>>k;
        a.push_back(k);
    }
    sort(a.begin(),a.end());
    int l[100]={0};
    for(int i=0;i<a.size();i++){
        l[a[i]]++;
    }
    sort(l,l+100);
    vector<int> h;
    for(int j=0;j<100;j++){
        if(l[j]>0)
        {
            h.push_back(l[j]);
        }
    }
    //最多的天数
    int g=m/n;
    int c=h.size()-1;
    int b=0;
    int flag=0;
    int d=n;
    for(int j=g;j>0;j--){
        for(int c=h.size()-1;c>=0;c--){
        b=h[c]/j;
        d=d-b;
        if(d<=0){
            cout<<j<<endl;
            flag=1;
            break;
        }
        }
        if(flag==1){
            break;
        }else{
            d=n;
        }
    }
    if(flag==0){
    cout<<'0'<<endl;}
    return 0;
}

题目三

图片说明
系统会随机生成id为jsLayout的 m x n 表格(m >= 3, n >= 3),请按照如下需求实现bind函数
1、bind 函数为每个td节点绑定click事件,当某个td节点被点击时class变为current,同时以该td为中心的九宫格td节点class变为wrap,具体效果参考以下图片
2、每次click后,请清空所有不需要变动的td节点的class
3、请不要手动调用bind函数
4、当前界面为系统生成 10 * 10 表格,执行 bind 函数,并点击第一个td后的效果
5、请不要手动修改html和css
6、不要使用第三方插件
7、请使用ES5语法

 var tds = document.querySelectorAll("td")

    for (let i = 0; i < tds.length; i++) {
        // 给单个表格添加click事件监听,当被点击时,先清除整个表格的所有的样式
        tds[i].addEventListener("click", function () {
            for (let j = 0; j < tds.length; j++) {
                tds[j].className = ""
            }
            // 给当前被点击的td添加类
            tds[i].classList.add("current")
            // 如果有下一个姐妹
            if (tds[i].nextElementSibling)
                tds[i].nextElementSibling.classList.add("wrap")
            //如果有前一个姐妹 
            if (tds[i].previousElementSibling)
                tds[i].previousElementSibling.classList.add("wrap")
            // 如果有下一行,因为一行有10个所以%10
            if (tds[i].parentElement.nextElementSibling !== null) {
                tds[i].parentElement.nextElementSibling.children[i % 10].classList.add("wrap")
                                //不在右边界
                if ((i % 10) !== 9) {
                    if (tds[i].parentElement.nextElementSibling.children[(i + 1) % 10] !== null) {
                        tds[i].parentElement.nextElementSibling.children[(i + 1) % 10].classList.add("wrap")
                    }
                }
                                //不在左边界
                if ((i % 10) !== 0) {
                    if (tds[i].parentElement.nextElementSibling.children[(i - 1) % 10] !== null) {
                        tds[i].parentElement.nextElementSibling.children[(i - 1) % 10].classList.add("wrap")
                    }
                }
            }
            if (tds[i].parentElement.previousElementSibling !== null) {
                tds[i].parentElement.previousElementSibling.children[i % 10].classList.add("wrap")

                if ((i % 10) !== 9) {
                    if (tds[i].parentElement.previousElementSibling.children[(i + 1) % 10] !== null) {
                        tds[i].parentElement.previousElementSibling.children[(i + 1) % 10].classList.add("wrap")
                    }
                }
                if ((i % 10) !== 0) {
                    if (tds[i].parentElement.previousElementSibling.children[(i - 1) % 10] !== null) {
                        tds[i].parentElement.previousElementSibling.children[(i - 1) % 10].classList.add("wrap")
                    }
                }

            }

        })

    }