2022-01-28 16:38:50
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 |
也可以下载附件,直接双击打开。
<div> <div style="">组合的结果</div> <textarea id="zuhe" style="height:40%"></textarea> <div style="">排列的结果</div> <textarea id="pailie" style="height:40%"></textarea></div><script>zuhe();pailie();function pailie(){ //不考虑顺序,组合问题(arr1中的3个数按从左到右顺序,其他按从小到大顺序) //从3,5,9,6,11里边取3个,有C(5,3)=5*4*3/(3*2*1)=10中取法; //再从剩下的(11-3)=8个数里边取两个,有C(8,2)=8*7/(2*1)=28种取法。 //共有10*28=280种排列方式,去掉里边[3,5,9,6,11]的排列(C(5,3)*1=10种),所以最终结果为280-10=270 //也就是说生成的arr2里边有270个元素。 var arr1 = [3, 5, 9, 6, 11]; //5选3 var r3 = []; var r5 = []; var i, j, k, a, m, n; for(i=0;i<3;i++){ for(j=i+1;j<4;j++){ for(k=j+1;k<5;k++){ r3.push([arr1[i], arr1[j], arr1[k]]); //获取剩余的8个数 var r8 = []; for (m = 1; m <= 11; m++) { if (m == arr1[i] || m == arr1[j] || m == arr1[k]) continue; r8.push(m); } //8选2 for (m = 0; m < 7; m++) { for (n = m + 1; n < 8; n++) { if (arr1.indexOf(r8[m]) == -1 || arr1.indexOf(r8[n]) == -1) { //筛掉两个数都是arr1里边的 r5.push([arr1[i], arr1[j], arr1[k], r8[m], r8[n]]); } } } } } } console.log(r3.length); console.log(r5.length); var tf = document.getElementById("pailie"); tf.value = r5.join("\n");}function zuhe() { //考虑顺序,排列问题 //从3,5,9,6,11里边取3个,有A(5,3)=5*4*3=60中取法; //再从剩下的(11-3)=8个数里边取两个,有A(8,2)=8*7=56种取法。 //共有60*56=3360种排列方式,去掉里边[3,5,9,6,11]的排列(共有A(5,5)=5*4*3*2*1=120种),所以最终结果为3360-120=3240种 //也就是说生成的arr2里边有3240个元素。 var arr1 = [3, 5, 9, 6, 11]; //5选3 var r3 = []; var r5 = []; var i, j, k, a, m, n; for (i = 0; i < 5; i++) { for (j = 0; j < 5; j++) { if (j == i) continue; for (k = 0; k < 5; k++) { if (k == i || k == j) continue; r3.push([arr1[i], arr1[j], arr1[k]]); //获取剩余的8个数 var r8 = []; for (m = 1; m <= 11; m++) { if (m == arr1[i] || m == arr1[j] || m == arr1[k]) continue; r8.push(m); } //8选2 for (m = 0; m < 7; m++) { for (n = m + 1; n < 8; n++) { if (arr1.indexOf(r8[m]) == -1 || arr1.indexOf(r8[n]) == -1) { //筛掉两个数都是arr1里边的 r5.push([arr1[i], arr1[j], arr1[k], r8[m], r8[n]]); r5.push([arr1[i], arr1[j], arr1[k], r8[n], r8[m]]); } } } } } } console.log(r3.length); console.log(r5.length); var tf = document.getElementById("zuhe"); tf.value = r5.join("\n");}</script>