列出列表中任意多个数字相加等于指定数字的所有情况
本帖最后由 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] 好像也不是很难啊,三句话搞定了 就是冒泡排序的思路,把比较的条件换一换。
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') z5560636 发表于 2021-7-6 10:06
好像也不是很难啊,三句话搞定了 就是冒泡排序的思路,把比较的条件换一换。
不只两个数相加,有可能是三个数,四个数.... 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) 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:51 编辑
lengyue869 发表于 2021-7-6 10:33
这是你自己写的还是你老师写的?
错了,为什么 8640 + 112626 = 121266 没有出现再结果里面?
我题目理解没到位,等有空帮你写个。 z5560636 发表于 2021-7-6 13:50
这是你自己写的还是你老师写的?
错了,为什么 8640 + 112626 = 121266 没有出现再结果里面?
百度搜的
8640 + 112626 = 121266 没出现是因为list数据变了
页:
[1]