枚举算法

作者: ferrint | 来源:发表于2017-02-26 21:09 被阅读18次

    枚举法:又称穷举法,是指从可能的集合中一一列举各个元素,用题目给定的约束条件判定哪些是无用的,哪些是有用的。能使命题成立者,即为问题的解。

    案例

    首先我们先来看一个枚举算法的经典案例,当乘积所有位数一致时,乘数是多少:

    <!-- html代码 -->
    <div style="width:200px;margin: 0 auto; position: relative;overflow: hidden;">
          <p style="margin-left:1em">
        <span>枚</span>
        <span>举</span>
        <span>算</span>
        <span>法</span>
        <span>题</span>
      </p>
        <p> *
            <span style="position: absolute;top:3em;left:7em;">枚</span>
        </p>
        <hr width="300">
        <p>
            <span>题</span>
            <span>题</span>
            <span>题</span>
            <span>题</span>
            <span>题</span>
            <span>题</span>
        </p>
    
    /*js代码*/
       var aP = document.querySelectorAll('p');
       var span1 = aP[0].querySelectorAll('span');
       var span2 = aP[1].querySelectorAll('span');
       var span3 = aP[2].querySelectorAll('span');
    
       for(var i=1;i<=9;i++){
         for(var j=1;j<=9;j++){
             for(var k=1;k<=9;k++){
             for(var m=1;m<=9;m++){
                 for(var n=1;n<=9;n++){
                 
                 var a = 10000*i + 1000*j + 100*k + 10*m + 1*n;
                 var b = i;
                 var c = 5*111111;
    
                 if(a*b == c){
                    span1[0].innerHTML = i;
                    span1[1].innerHTML = j;
                    span1[2].innerHTML = k;
                    span1[3].innerHTML = m;
                    span1[4].innerHTML = n;
                    span2[0].innerHTML = i;
                    for(var x=0;x<span3.length;x++){
                        span3[x].innerHTML = n;
                    }
                 }
                 }
             }
             }
         }
       }
    
    
    实例

    我们做一个前端领域常用的实例,点击城市名就能在ul标签里添加一个城市,如果有重复点击,该城市会排到第一位

    <!-- html代码 -->
    </div>
       <a href="javascript:;">北京</a>
       <a href="javascript:;">上海</a>
       <a href="javascript:;">武汉</a>
       <a href="javascript:;">成都</a>
       <a href="javascript:;">昆明</a>
       <a href="javascript:;">重庆</a>
       <a href="javascript:;">深圳</a>
       <a href="javascript:;">杭州</a>
       <a href="javascript:;">苏州</a>
       <a href="javascript:;">无锡</a>
       <a href="javascript:;">南通</a>
       <a href="javascript:;">广州</a>
       <a href="javascript:;">天津</a>
       <a href="javascript:;">青岛</a>
       <ul>
       </ul>
    

    列举了一些城市,新建了一个空的盒子ul,我们接着用js实现点击动态添加元素

       var city = document.querySelectorAll('a');
       var list = document.querySelector('ul');
       var item = document.getElementsByTagName('li');
    
       for(var i=0;i<city.length;i++){
        city[i].onclick = function () {
            var oLi = document.createElement('li');         
            if(feat(this.innerHTML))
            {
                  list.insertBefore(oLi,item[0]);
                  oLi.innerHTML= this.innerHTML;        
            }else
            {
            for(var i=0;i<item.length;i++){
                if(item[i].innerHTML == this.innerHTML){
                    list.insertBefore(item[i],item[0]);
                }
            }
          }
         }
       }
    
        /*防止重复添加*/
       function feat(val){
            var result = true;
            for(var i=0;i<item.length;i++){
                if (val == item[i].innerHTML ) {result = false}
            }
          //console.log(result);
          return result;
    
       }
    

    大功告成!!!

    相关文章

      网友评论

        本文标题:枚举算法

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