鱼C论坛

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

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

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

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

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

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

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


  1. l=[138180,201186,269328,8640,112626,6214,2180,2180,4995,106612,620,98248,2074,239,286,
  2.    22320,16758,6260,3351,43344,107480,9950,9950,13900,9950,9950,16136,12390,476,848,1136]
复制代码
小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

发表于 2021-7-6 10:06:50 | 显示全部楼层
好像也不是很难啊,  三句话搞定了   就是冒泡排序的思路,把比较的条件换一换。
  1. l=[138180,201186,269328,8640,112626,6214,2180,2180,4995,106612,620,98248,2074,239,286,
  2.    22320,16758,6260,3351,43344,107480,9950,9950,13900,9950,9950,16136,12390,476,848,1136]


  3. for i in range(0,len(l)):
  4.     for j in range(i,len(l)):
  5.         if l[i] + l[j] == 121266:
  6.             print(l[i],'+',l[j] ,'= 121266')
复制代码
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

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

不只两个数相加,有可能是三个数,四个数....
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2021-7-6 10:33:45 | 显示全部楼层
  1. l=[138180,201186,269328,8640,6680,6214,2180,2180,4995,107960,620,98248,2074,239,286,22320,
  2.    142288,6260,3351,43344,9950,9950,9950,13900,9950,9950,16136,12390,476,848,1136]


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


  6. def combination_impl(l, n, stack):
  7.     if n == 0:
  8.         print(stack)
  9.         return
  10.     for i in range(0, len(l)):
  11.         if l[i] <= n:
  12.             stack.append(l[i])
  13.             combination_impl(l[i + 1:], n - l[i], stack)
  14.             stack.pop()
  15.         else:
  16.             break


  17. combination(l, 121266)
复制代码
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2021-7-6 11:00:07 | 显示全部楼层
java实现方式:暴力
  1. package com.lian.controller;

  2. import java.util.ArrayList;
  3. import java.util.List;

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

  10.     public static List a(int[] arr, int num){
  11.         List strList = new ArrayList();
  12.         for (int i = 0; i < arr.length; i++) {
  13.             int all = arr[i];
  14.             String str = arr[i] + ",";
  15.             for (int j = i+1; j < arr.length; j++) {
  16.                 all += arr[j];
  17.                 str += arr[j] + ",";
  18.                 if (all == num) {
  19.                     strList.add(str);
  20.                 }
  21.             }
  22.         }
  23.         return strList;
  24.     }

  25.     public static void main(String[] args) {
  26.         int []b = new int[]{138180,201186,269328,8640,112626,6214,2180,2180,4995,106612,620,98248,2074,239,286,
  27.                 22320,16758,6260,3351,43344,107480,9950,9950,13900,9950,9950,16136,12390,476,848,1136};
  28.         List a1 = a(b, 46695);
  29.         for (int i = 0; i < a1.size(); i++) {
  30.             String string = (a1.get(i)).toString();
  31.             System.out.println(string.substring(0,string.length()-1));
  32.         }
  33.     }
  34. }
复制代码
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

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


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


我题目理解没到位,等有空帮你写个。
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

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

百度搜的
8640 + 112626 = 121266 没出现是因为list数据变了
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

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

本版积分规则

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

GMT+8, 2025-6-21 23:53

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

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