ปัญหาในชีวิตจริงอาจถูกแยกออกเป็นรูปแบบข้อมูลดังกล่าว:
เลือกตัวเลขหลายตัวจากอาร์เรย์และปล่อยให้ผลรวมของตัวเลขเหล่านี้เป็นค่าที่ระบุ
ผู้อ่านส่วนใหญ่ควรมีประสบการณ์การช็อปปิ้งออนไลน์ การช็อปปิ้งออนไลน์โดยทั่วไปมีฟังก์ชั่นการสั่งซื้อ หากผู้อ่านซื้อผลิตภัณฑ์มูลค่า 70 หยวน แต่ต้องมีมากกว่า 100 หยวนเพื่อจัดส่งฟรีระบบจะแนะนำผลิตภัณฑ์บางอย่างโดยอัตโนมัติซึ่งจะเพิ่มมากถึง 100 หยวน
ระบบกำหนดผลิตภัณฑ์ที่จะแนะนำได้อย่างไร นี่เป็นแบบจำลองที่กล่าวถึงตอนนี้ เราสามารถนำราคาของผลิตภัณฑ์ที่ขายร้อนไว้ในอาร์เรย์แล้วใช้อัลกอริทึมเพื่อค้นหาว่าราคารวมราคาในอาร์เรย์คือ 30 หยวน
ไร้สาระน้อยลง Xiaocai จะแบ่งปันการใช้งานอัลกอริทึมเวอร์ชัน JavaScript กับคุณ
รหัสอัลกอริทึม:
ฟังก์ชั่น getCombbysum (อาร์เรย์, ผลรวม, ความอดทน, targetCount) {var util = {/*รับการรวมกันจาก Arrayarr: Arraynum เป้าหมาย: รายการความยาวรวม: หนึ่งอาร์เรย์ที่มีการรวมกัน*/getcombination: ฟังก์ชัน (arr, num) {var r = []; i = 0, l = a.length; 0; i <array.length; i ++) {r.push (i);} return r;}}, logic = {// เรียงลำดับอาร์เรย์จากนั้นรับสิ่งที่เราต้องการ: ฟังก์ชั่น (อาร์เรย์, ผลรวม) {// clone arrayvar _array = array.concat () b;}); // รับหมายเลขทั้งหมดเมื่อน้อยกว่าหรือเท่ากัน sumfor (i = 0; i <_array.length; i ++) {ถ้า (_array [i] <= sum) {r.push (_array [i]);}} {break;}}}}} 0, combarray = [], _ sum = 0, _cca = [], _ cache = []; ถ้า (count == _returnmark) {return;} // รับการนับจำนวน combinationcombarray = util.getcombination (arrayIndex, count); สำหรับ (i = 0; 0; _cache = []; // คำนวณผลรวมจากการรวมกัน (k = 0; k <_cca.length; k ++) {_ sum+= อาร์เรย์ [_cca [k]]; _ cache.push (อาเรย์ [_cca [k]); } logic.core (อาร์เรย์, ผลรวม, arrayIndex, count-1, r);}}, r = [], _ array = [], _ targetCount = 0, _Tolerance = 0, _returnmark = 0; // ตรวจสอบ data_targetCount = TargetCount _targetCount; _Tolerance = ความอดทน || _tolerance; _array = logic.init (อาร์เรย์, ผลรวม); if (_targetCount) {_ returnmark = _targetCount-1;} logic.core (_array, ผลรวม, util.getArrayIndex (_Array), (_ TargetCount || _array.length), r); return r;}}คำแนะนำการโทร:
อาร์เรย์: อาร์เรย์แหล่งข้อมูล ที่จำเป็น.
ผลรวม: ผลรวมของผลรวม ที่จำเป็น.
ความอดทน: ความอดทน หากไม่ได้ระบุพารามิเตอร์นี้ผลรวมของผลรวมจะต้องเท่ากับพารามิเตอร์ผลรวมการระบุพารามิเตอร์นี้จะทำให้ผลลัพธ์ลอยอยู่ภายในช่วงความคลาดเคลื่อน ไม่จำเป็น.
TargetCount: จำนวนตัวถูกดำเนินการ หากไม่ได้ระบุพารามิเตอร์นี้ผลลัพธ์จะมีกรณีที่เป็นไปได้ทั้งหมด การระบุพารามิเตอร์นี้สามารถกรองตัวเลขที่แน่นอนและเพิ่ม หากระบุเป็น 3 ผลลัพธ์จะมีเพียงสามตัวเลข ไม่จำเป็น.
ค่าส่งคืน: โครงสร้างอาร์เรย์ที่ส่งคืนเป็นอาร์เรย์องค์ประกอบในอาร์เรย์ด้านในคือตัวถูกดำเนินการและองค์ประกอบในอาร์เรย์ด้านนอกเป็นผลลัพธ์ที่เป็นไปได้ทั้งหมด