lengyue869 发表于 2021-7-6 09:57:57

列出列表中任意多个数字相加等于指定数字的所有情况

本帖最后由 lengyue869 于 2021-7-6 10:34 编辑

例如列表l中所有可能相加等于121266的所有情况


l=[138180,201186,269328,8640,112626,6214,2180,2180,4995,106612,620,98248,2074,239,286,
   22320,16758,6260,3351,43344,107480,9950,9950,13900,9950,9950,16136,12390,476,848,1136]

z5560636 发表于 2021-7-6 10:06:50

好像也不是很难啊,三句话搞定了   就是冒泡排序的思路,把比较的条件换一换。
l=[138180,201186,269328,8640,112626,6214,2180,2180,4995,106612,620,98248,2074,239,286,
   22320,16758,6260,3351,43344,107480,9950,9950,13900,9950,9950,16136,12390,476,848,1136]


for i in range(0,len(l)):
    for j in range(i,len(l)):
      if l + l == 121266:
            print(l,'+',l ,'= 121266')

lengyue869 发表于 2021-7-6 10:09:51

z5560636 发表于 2021-7-6 10:06
好像也不是很难啊,三句话搞定了   就是冒泡排序的思路,把比较的条件换一换。

不只两个数相加,有可能是三个数,四个数....

lengyue869 发表于 2021-7-6 10:33:45

l=[138180,201186,269328,8640,6680,6214,2180,2180,4995,107960,620,98248,2074,239,286,22320,
   142288,6260,3351,43344,9950,9950,9950,13900,9950,9950,16136,12390,476,848,1136]


def combination(l, n):
    l = list(sorted(filter(lambda x: x <= n, l)))
    combination_impl(l, n, [])


def combination_impl(l, n, stack):
    if n == 0:
      print(stack)
      return
    for i in range(0, len(l)):
      if l <= n:
            stack.append(l)
            combination_impl(l, n - l, stack)
            stack.pop()
      else:
            break


combination(l, 121266)

连帅帅 发表于 2021-7-6 11:00:07

java实现方式:暴力
package com.lian.controller;

import java.util.ArrayList;
import java.util.List;

/**
* @author :LSS
* @description: 列出列表中任意多个数字相加等于指定数字的所有情况,java实现,暴力破解
* @date :2021/7/6 10:39
*/
public class Test1 {

    public static List a(int[] arr, int num){
      List strList = new ArrayList();
      for (int i = 0; i < arr.length; i++) {
            int all = arr;
            String str = arr + ",";
            for (int j = i+1; j < arr.length; j++) {
                all += arr;
                str += arr + ",";
                if (all == num) {
                  strList.add(str);
                }
            }
      }
      return strList;
    }

    public static void main(String[] args) {
      int []b = new int[]{138180,201186,269328,8640,112626,6214,2180,2180,4995,106612,620,98248,2074,239,286,
                22320,16758,6260,3351,43344,107480,9950,9950,13900,9950,9950,16136,12390,476,848,1136};
      List a1 = a(b, 46695);
      for (int i = 0; i < a1.size(); i++) {
            String string = (a1.get(i)).toString();
            System.out.println(string.substring(0,string.length()-1));
      }
    }
}

z5560636 发表于 2021-7-6 13:50:02

本帖最后由 z5560636 于 2021-7-6 13:51 编辑

lengyue869 发表于 2021-7-6 10:33


这是你自己写的还是你老师写的?
错了,为什么 8640 + 112626 = 121266   没有出现再结果里面?


我题目理解没到位,等有空帮你写个。

lengyue869 发表于 2021-7-7 16:20:46

z5560636 发表于 2021-7-6 13:50
这是你自己写的还是你老师写的?
错了,为什么 8640 + 112626 = 121266   没有出现再结果里面?



百度搜的
8640 + 112626 = 121266 没出现是因为list数据变了
页: [1]
查看完整版本: 列出列表中任意多个数字相加等于指定数字的所有情况