多个集合元素排列组合算法

功能需求

模拟考试选择题 答题结果集合
选择题每个选项分数不固定 选项个数不固定
输入选择题 所有选项 求答题有可能得到的所有分数
把选择题抽象成程序
//定义选择题
var arr = [
	[1,2],
	[2,3],
	[4,5],
	[6,7,8]
];
结题过程
let arr = [[1,2],[2,3],[4,5],[6,7,8]];
	console.log("输入:");
	console.log(arr);
	//[[ 1,2],[2,3],[4, 5],[6,7, 8]]
	list = arr.reduce(function(prev,cur,index,array){
		let arr1 = [];
		prev.forEach(item=>{
			let arr2 = [];
			if(!Array.isArray(item)){
				arr2.push(item);
			}else{
				arr2 = item;
			}
			cur.forEach(val=>{
				arr2.push(val);
				let arr3 = [];
				arr3 = [...arr2];
				arr1.push(arr3);
				arr2.splice(arr2.length - 1, 1);
			});
		});
		return arr1;
	});
	console.log("输出组合结果:");
	console.log(list);
	//[[1,2,4,6],[1,2,4,7],[1,2,4,8],[1,2,5,6],[1,2,5,7],[1,2,5,8],[1,3,4,6],[1,3,4,7],[1,3,4,8],[1,3,5,6],[1,3,5,7],[1,3,5,8],[2,2,4,6],[2,2,4,7],[2,2,4,8],[2,2,5,6],[2,2,5,7],[2,2,5,8],[2,3,4,6],[2,3,4,7],[2,3,4,8],[2,3,5,6],[2,3,5,7],[2,3,5,8]]
	//求和
	var logArr = [];
	list.forEach(item=>{
		logArr.push(sum(item));
	})
	//数组去重
	var logArr =logArr.filter(function(value,index,self){
   		return self.indexOf(value) ===index;
		});
	console.log("输出目标结果:");
	console.log(logArr.sort((a, b) => a - b));
	//[13,14,15,16,17,18]
	// helper function []求和
	function sum(arr) {
	  return arr.reduce(function(prev, curr, idx, arr){
	    return prev + curr;
	  });
	}

可用于测试类题目 计算得分范围 求集合交集 合集

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值