鱼C论坛

 找回密码
 立即注册
查看: 1707|回复: 6

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

[复制链接]
发表于 2021-7-6 09:57:57 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能^_^

您需要 登录 才可以下载或查看,没有账号?立即注册

x
本帖最后由 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]
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 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[i] + l[j] == 121266:
            print(l[i],'+',l[j] ,'= 121266')
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

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

不只两个数相加,有可能是三个数,四个数....
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 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[i] <= n:
            stack.append(l[i])
            combination_impl(l[i + 1:], n - l[i], stack)
            stack.pop()
        else:
            break


combination(l, 121266)
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 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[i];
            String str = arr[i] + ",";
            for (int j = i+1; j < arr.length; j++) {
                all += arr[j];
                str += arr[j] + ",";
                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));
        }
    }
}
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2021-7-6 13:50:02 | 显示全部楼层
本帖最后由 z5560636 于 2021-7-6 13:51 编辑


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


我题目理解没到位,等有空帮你写个。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2021-7-7 16:20:46 | 显示全部楼层
z5560636 发表于 2021-7-6 13:50
这是你自己写的还是你老师写的?
错了,  为什么 8640 + 112626 = 121266   没有出现再结果里面?

百度搜的
8640 + 112626 = 121266 没出现是因为list数据变了
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2025-1-14 01:07

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表