for(var i=0;i<5;i++){
var firstNo=i;
for(var j=0;j<5;j++){
if(j==i)continue;
var secondNo=j;
for(var k=0;k<5;k++){
if(j==k||i==k)continue;
var thirdNo=k;alert(firstNo +" "+secondNo+" "+thirdNo);
}
}
}
firstNo 是第一个数
secondNo 是第二个数
thirdNo 是第三个数

解决方案 »

  1.   

    我觉得你这不止是要长度为5取3个的吧是不是还有长度为n,取m个的情况?如果有这样的情况的话,那可是一个很复杂的啊,估计没人会在这里给你写的,除非是有现成的代码。而如果只是5取3的话,还要什么算法的,直接写就行了,虽然代码看起来不好看,但是性能肯定是最好的。比如直接这么写:
    var str1 = [1,2,3,4,5];
    var str2 = [];
    str2[0] = [str1[0],str1[1],str1[2]],
    str2[1] = [str1[0],str1[1],str1[3]],
    str2[2] = [str1[0],str1[1],str1[4]],
    str2[3] = [str1[0],str1[2],str1[3]],
    str2[4] = [str1[0],str1[2],str1[4]],
    str2[5] = [str1[0],str1[3],str1[4]],
    str2[6] = [str1[1],str1[2],str1[3]],
    str2[7] = [str1[1],str1[2],str1[4]],
    str2[8] = [str1[1],str1[3],str1[4]],
    str2[9] = [str1[2],str1[3],str1[4]];
    console.log(str2);对于小数组固定的分组,这样分是性能最优的,这样就只是执行了十个赋值语句如果你用三个for语句循环,循环的次数,最小都比10大。算法,只是因为因为个数或者什么的,不固定,只能用一些计算规则去处理,你如果个数是固定的,最后的结果也是固定的,那么就直接人为的以赋值语句的形式给出就行了。而且,这样做,比你花时间去写一个算法要节省很多时间吧,关键还是,这样的性能最好啊。在这个时候,不管是对自己的时间,还是对计算式的执行时间,都有好处,为啥还要去浪费时间搞一个算法呢
      

  2.   

    吃早饭的时候顺手写的...测试下有没有BUG
    <html>
    <head>
    <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
    <script>
    function com(){
    var s = eval(document.getElementById('s').value);
    var n = document.getElementById('n').value;
    var r = document.getElementById('r');
    r.innerHTML = "";
    for (var i=0;i<Math.pow(2, s.length);i++){
    var a = 0;
    var b = "";
    for (var j=0;j<s.length;j++){
    if (i>>j&1){
    a++;
    b += s[j];
    }
    }
    if (a==n){
    r.innerHTML += (b+"<br/>");
    }
    }
    }
    </script>

    </head>
    <body>
    数据:<input name="s" size="30" value="[1,2,3,4,5]">
    取值量:<input name="n" size="2" value="3"/>
    <button onclick="com()">计算</button>
    <div id="r"></div>
    </body>
    </html>