JS数组5个选3个,5个选2个怎么写

vararr1=[3,5,9,6,11];1.从数组arr1里取其中三个值组合成一个新数组如下:arr2=[[3,5,9,x1,x2],//x1:为1-11之间的数(但不... var arr1 = [3,5,9,6,11];
1.从数组 arr1 里取其中三个值组合成一个新数组如下:
arr2 = [
[3,5,9,x1,x2],
//x1:为1-11之间的数( 但不能包含前面的三个数值 3,5,9 );
//x2:为1-11之间的数( 但不能包含前面的四个数值 3,5,9,x1 );
[3,5,6,x1,x2]
++其他全部数组....
];
2. arr2里不能包含有arr1 (从小到大排序后在对比)

以上JS 应该怎么写? 完整JS最好 先谢过了
展开
 我来答
hanlidongyang
2016-07-22 · TA获得超过885个赞
知道小有建树答主
回答量:1109
采纳率:50%
帮助的人:487万
展开全部
	<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>

也可以下载附件,直接双击打开。

推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式