随机洗牌问题

仍然是上一篇中那个公司的笔试题(编程题无语言要求),给一副扑克牌随机洗牌无规律可循,仍然是写出思路和流程图还有程序;当时写的是1.把牌分红6*9即6组每组9张   2.六组中进行两两分配而后进行交叉洗牌,当时不知道问什么用分治法解决,既增长课空间复杂度并且增长了空间复杂度,如今写出新的思路,可能算法的选择任然不是最好的,可是不失为一种解决方案:算法

1.随机生成1~54中的两个数若是相等则终止继续for循环编程

2.若是不相等则对数组值进行交换数组

其中1中的for循环的循环上限设为<30仅为猜测54个位置可重复两两随机交换30次彻底能够打乱,至于具体最佳数字的判断,想了一下没有分析出来具体代码以下: dom

<script>
var arr =new Array();
function creat(){
    for(var i=0;i<54;i++){
        arr[i]=i+1;
    } 
    write();
}

function write(){
    for(var i=0;i<54;i++)
    {
        document.writeln(arr[i]);
    }
    alert(arr.length);
}

function exchange(num1,num2){
    var m = num1;
    var n= num2;
    //alert(m+"*"+n);
    if(m!=n)
    {
        return true;
    }
}//

window.onload=function(){
    creat();
    for(var i=0;i<30;i++)
    {
        var iNum1 =Math.round(Math.random()*54);//random随机生成的数为0~1间的数字
        var iNum2 =Math.round(Math.random()*54);
        alert(arr[iNum1]+"&"+arr[iNum2]);
        var flag = exchange(arr[iNum1],arr[iNum2]);
        if(flag)
        {
            var t = arr[iNum1];
            arr[iNum1] = arr[iNum2];
            arr[iNum2] = t;
        }
        alert(arr[iNum1]+"&&&&&&&&&&&"+arr[iNum2]);
    }
    write();
}
</script>

 

对这两道题的解决算是博文的开端吧spa

相关文章
相关标签/搜索