仍然是上一篇中那個公司的筆試題(編程題無語言要求),給一副撲克牌隨機洗牌無規律可循,仍然是寫出思路和流程圖還有程序;當時寫的是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