算法问题:在一组N个数中,要找到一组数的和=M

问题描述

有个朋友请求帮忙解决一个难题:在几千个(N)金额数据中(有小数点后2位),需要找到一组数据的集合,使得集合中数据的和为某个固定的数M(是个整数),看用什么算法能快速找到这样的数据集合。不知道各位大侠有没有好办法!

解决方案

解决方案二:
先排序,然后一重循环得到的值大于m跳出循环,后面相同原理!packagetest;importjava.util.ArrayList;importjava.util.Collections;importjava.util.List;importorg.fluttercode.datafactory.impl.DataFactory;publicclassArrayAdd{publicstaticvoidmain(String[]args){DataFactorydf=newDataFactory();List<Integer>list=newArrayList<Integer>();for(inti=0;i<1000;i++){list.add(df.getNumber());}Collections.sort(list);finalintm=5000;inta=m-list.get(0)-list.get(1);intb=0;for(inti=0;i<list.size();i++){if(m<i){continue;}for(intj=i+1;j<list.size();j++){if(m<i+j){continue;}for(intj2=j+1;j2<list.size();j2++){if(m==i+j+j2){System.out.println("i="+i+",j="+j+",j2="+j2);System.out.println("num1+"+list.get(i)+"num2="+list.get(j)+"num3="+list.get(j2));}else{if(m<i+j+j2){continue;}}}}}}}

时间: 2024-09-04 19:51:01

算法问题:在一组N个数中,要找到一组数的和=M的相关文章

【算法与数据结构】在n个数中取第k大的数(基础篇)

(转载请注明出处:http://blog.csdn.net/buptgshengod) 题目介绍           在n个数中取第k大的数(基础篇),之所以叫基础篇是因为还有很多更高级的算法,这些以后再讨论.本文用两种最基本的方法来解决这个问题.使用java语言描述.例子是十个数中取第三大的. 算法一              用冒泡法将n个数从大到小排序,再取第k大. public class test { public static void main(String []args) { i

求解答-试编写一个算法,找出一个循环链表中的最小值。我是新手,编了一个程序,不知错在哪

问题描述 试编写一个算法,找出一个循环链表中的最小值.我是新手,编了一个程序,不知错在哪 #includeusing namespace std; class LinkNode{ int data; LinkNode *link; LinkNode(int d=0LinkNode *l=0){data=d;link=l;}}; class List{private: LinkNode *first; int n;public: List() { first=new LinkNode; first

c语言程序设计-C语言求从n个数中选出k个的最优算法

问题描述 C语言求从n个数中选出k个的最优算法 在计算组合问题时一般算法总会溢出,有没有啥极快又可以避免溢出的算法? 解决方案 外部排序,你可是试试看

C语言中判断一个数是否是回文数

注:回文数即数字顺着和反着是同一个数! 看了郝斌老师的C语言视频,虽然还只看了80多个,但是还是有一些体会,编程应该养成良好的编程风格,至少到现 在为止写的这些小程序都应该有下面这样一个过程: 1,流程:(知道程序是按照怎样的顺序运行的) 2,功能:(理解程序的作用) 3,试数:(我个人简单的理解为测试过程,把自己当作计算机去执行程序) /* 2012年4月20日 10:36:23 判断一个数是否是回文数 */ #include <stdio.h> int main(void) { int v

在Excel中如何将一组数据绘制成图标?

  在Excel中如何将一组数据绘制成图标? 1.选定一组数据 2.点插入,这里有很多种图标,我们选择散点图,然后选择第一个示例图 3.选择图标,左击图表中数点,选择添加趋势线 4.这里选择线性,勾选显示公式及显示R平方值 5.设置坐标轴名称,选择布局,坐标轴标题,主要横坐标标题 6.输入标题名称,同法纵坐标操作 注意事项 选择趋势线时根据实际情况进行选择

tinyos-在tinyOS下写nec程序,在一组无线节点中进行数据包转发及打印

问题描述 在tinyOS下写nec程序,在一组无线节点中进行数据包转发及打印 10C 选取一个节点作为数据源节点,向网络中的其它节点进行数据包的转发,并将数据包中的内容打印出来. 解决方案 tiny OS第一次听说.有空去百度一下看看.先帮楼主顶下先!

c-用C语言实现在键盘输入两个十进制数,然后在屏幕输出这两个数中较大的那个数

问题描述 用C语言实现在键盘输入两个十进制数,然后在屏幕输出这两个数中较大的那个数 我是这样写的: #include #include void main() { scanf("%d,%d",&a,&a,&b); c=max(a,b); print("max=%d",c); return 0; } 可是怎么就不对了呢?想不明白..啊-- 解决方案 1;如wolf所说,多一个&a,多return 0; 2;a,b,c没定义 3;我记得标

从M个数中随机取出N个

看到这样一个题目:在M个数中,随机取出其中的N个,要求等概率. 这应该是一个比较简单的题目,看到题目后的第一想法是:维护一个关于这M个数的集合,然后每次随机从集合中抽一个数,抽N次即可. 等概率显然不是什么问题,当然前提是假设随机函数是等概率的,否则任何方法都免谈了. 对于其中的每一个数,它在每一次不被抽走的概率是:(M-1)/M.(M-2)/(M-1).....(M-N)/(M-N-1),到最后还没被抽走的概率就是(M-N)/M,也就是说它会被抽走的概率是N/M. 看到一个网友的解决思路,感觉

java虚拟机-java 垃圾回收 Mark-and-Compact 算法 去碎片如何操作堆中内存的

问题描述 java 垃圾回收 Mark-and-Compact 算法 去碎片如何操作堆中内存的 在压缩堆内存阶段,遍历堆中所有对象并将存活对象重新放入连续的内存地址的 过程中,如果某个存活对象即将放入的地址中存有另一个还没有被移动的存活的对象, java jvm如何进行操作呢? 我看的算法中没有给此方面的信息.它只说存活对象放入 连续的堆中! 大神!!!!求助!!!!!!!!!