- 浏览: 365482 次
- 性别:
- 来自: 长沙
文章分类
- 全部博客 (186)
- J2EE (46)
- spring (4)
- Applet (7)
- 网页前端 (10)
- 生活与工作 (55)
- 开放的世界 (10)
- linux (16)
- j2me (2)
- android (5)
- ExtJS (1)
- 架构师与设计 (7)
- 开发平台 (2)
- Eclipse (4)
- 教育 (0)
- 数据库 (9)
- English (1)
- Jetty (2)
- 未分类 (1)
- 工具 (2)
- flex (2)
- synchronized (1)
- maven (2)
- command (0)
- shell (1)
- web (1)
- qq (3)
- wine (3)
- chrome (1)
- extensions (1)
- plugin (1)
- 插件 (1)
- ssh (1)
- 内网 (1)
- J2EE excel (1)
- ubuntu (4)
- storm (2)
- hadoop (1)
最新评论
-
skzr.org:
jdbc:mysql://localhost:3306/?us ...
storm topology all in one spring文件合并 -
chenghong726:
你好,我用你这个方法,上传文件72M一直卡在 mapper.s ...
超大excel读取 43万记录 26M文件 -
海hai:
您好我对这篇文章很敢兴趣可以和你请教下吗?我qq9034418 ...
淘宝top自动授权页面,方便大家调试top应用 -
skzr.org:
首先感谢你的关注:)yaerfeng1989 写道最代码上有更 ...
[MAVEN]web工程的调试 -
skzr.org:
最新消息2013-12-17:腾讯再次弹出消息,我的QQ201 ...
ubuntu 12.04安装QQ2012
问题:如何找出6个小于33大于0的整数,加起来正好是150
结果:
找出6个小于33大于0的整数,加起来正好是150,可以重复
获取数据组合个数:1515921 耗时:3.986
代码: 不重复组合的
/** * 如何找出6个小于33大于0的整数,加起来正好是150,可以重复,比如[25,25,25,25,25,25],但是不需要考虑顺序 * 也就是说[26,24,25,25,25,25]和[24,26,25,25,25,25]是同一个组合 */ public static void main(String[] args) throws IOException { long end, start = System.currentTimeMillis(); List<int[]> ret = find(150, 6); TreeSet<int[]> result = new TreeSet<int[]>(new Comparator<int[]>() {//<---去掉重复的数据 @Override public int compare(int[] o1, int[] o2) { int len = o1.length > o2.length ? o2.length : o1.length; for (int i = 0; i < len; i++) if (o1[i] != o2[i]) return o1[i] - o2[i]; return o1.length - o2.length; } }); for (int[] tmp : ret) { Arrays.sort(tmp);//<--组合按照小-->大排列 result.add(tmp); } end = System.currentTimeMillis(); File f = new File("/home/skzrorg/number.txt"); f.createNewFile(); BufferedWriter writer = new BufferedWriter(new FileWriter(f)); writer.write("找出6个小于33大于0的整数,加起来正好是150,可以重复\n"); writer.write("获取数据组合个数:" + result.size() + " 耗时:" + (end - start)/1000.0 + "s\n"); StringBuffer buf = new StringBuffer(); for (int[] tmp : result) { buf.setLength(0); int s = 0; for (int i = 0; i < tmp.length; i++) { s += tmp[i]; buf.append(tmp[i]).append(','); } buf.deleteCharAt(buf.length() - 1).append('\n'); if (tmp.length != 6 || s != 150) { writer.write("一个错误的数据:\n\t"); } writer.write(buf.toString()); } writer.close(); } /** * 找出size个小于33大于0的整数,他们之和为sum,可以重复 * @param sum 和数 * @param size 整数个数 * @return 结果int[] * @author skzr.org(E-mail:skzr.org@gmail.com) */ private static List<int[]> find(int sum, int size) { List<int[]> ret = new ArrayList<int[]>(); if (size == 1) { for (int i = 1; i <= 33; i++) if (sum == i) ret.add(new int[]{i}); } else { for (int i = 1; i <= 33; i++) {//找到一个数据 if (i < sum) { List<int[]> others = find(sum - i, size - 1);//寻找其他数据 if (!others.isEmpty()) {//找到其他数据 for (int[] other : others) { int[] tmp = Arrays.copyOf(other, other.length + 1); tmp[other.length] = i; ret.add(tmp); } } } } } return ret; }
所有的组合的
/** * 如何找出6个小于33大于0的整数,加起来正好是150,可以重复,比如[25,25,25,25,25,25],但是不需要考虑顺序 *也就是说[26,24,25,25,25,25]和[24,26,25,25,25,25]是同一个组合 * @throws IOException */ public static void main(String[] args) throws IOException { long end, start = System.currentTimeMillis(); List<int[]> ret = find(150, 6); // ret.add(new int[]{1,23,32,30,32,32});//<---取消注释用于测试 检测重复是否正常工作 // ret.add(new int[]{25,25,25,25,25,25}); Collections.sort(ret, new Comparator<int[]>() {//<---排序和检测重复 @Override public int compare(int[] o1, int[] o2) { int len = o1.length > o2.length ? o2.length : o1.length; for (int i = 0; i < len; i++) if (o1[i] != o2[i]) return o1[i] - o2[i]; int ret = o1.length - o2.length; if (ret == 0) { StringBuffer buf = new StringBuffer(); for (int i = 0; i < o1.length; i++) { buf.append(o1[i]).append(','); } System.out.println("存在相同的数据:" + buf); } return ret; } }); end = System.currentTimeMillis(); File f = new File("/home/skzrorg/number.txt"); f.createNewFile(); BufferedWriter writer = new BufferedWriter(new FileWriter(f)); writer.write("找出6个小于33大于0的整数,加起来正好是150,可以重复\n"); writer.write("获取数据组合个数:" + ret.size() + " 耗时:" + (end - start)/1000.0 + "s\n"); StringBuffer buf = new StringBuffer(); for (int[] tmp : ret) { buf.setLength(0); int s = 0; for (int i = 0; i < tmp.length; i++) { s += tmp[i]; buf.append(tmp[i]).append(','); } buf.deleteCharAt(buf.length() - 1).append('\n'); if (tmp.length != 6 || s != 150) { writer.write("一个错误的数据:\n\t"); } writer.write(buf.toString()); } writer.close(); } /** * 找出size个小于33大于0的整数,他们之和为sum,可以重复 * @param sum 和数 * @param size 整数个数 * @return 结果int[] * @author skzr.org(E-mail:skzr.org@gmail.com) */ private static List<int[]> find(int sum, int size) { List<int[]> ret = new ArrayList<int[]>(); if (size == 1) { for (int i = 1; i < 33; i++) if (sum == i) ret.add(new int[]{i}); } else { for (int i = 1; i < 33; i++) {//找到一个数据 if (i < sum) { List<int[]> others = find(sum - i, size - 1);//寻找其他数据 if (!others.isEmpty()) {//找到其他数据 for (int[] other : others) { int[] tmp = Arrays.copyOf(other, other.length + 1); tmp[other.length] = i; ret.add(tmp); } } } } } return ret; }
发表评论
-
买了两山地车,骑车上下班。
2011-03-29 22:19 1272今天早上累死了终于没有迟到,不过打卡已经8:33了。 晚上回 ... -
core i7 + 4X2G DDR3 + Nvidia 2G独显 本本想入手阿
2011-03-27 22:06 998呵呵,如题! 貌似现在还比较贵,等 -
病不起 :)
2011-03-27 16:33 968无奈中-国-国-情的经验: 到医院不如到药店找售货的,人家简 ... -
准备进入另一个山头,留发纪念
2011-03-23 12:58 1155纪念2004-2010年流逝的岁月 -
2011年2月感触——思感提升30了阿
2011-02-13 21:22 1133转眼2011年了,呵呵步入人生的第30个年头 回 ... -
答复: 当你在进步而朋友原地不动时
2011-02-07 20:14 975论坛原文 iapple 写道刚好看到一位读者在 “Having ... -
生活是靠走的
2011-01-25 09:02 1078早上不知道怎样,想什么是人生曲线,低谷和山峰在哪儿,难道 ... -
心中疑问的思考?
2011-01-23 23:23 783工作感觉不得力,感 ... -
咳嗽 飞龙止咳
2010-12-19 14:38 11782010年CSDN上海软件开发者大会,飞龙 健康讲座 ... -
[转]迈向架构师的第一步
2010-11-25 15:20 967原文:CSDN ID:cutesource http:// ... -
[转]程序员不成熟的若干个特征
2010-11-25 15:16 735原文地址:CSDN 尹成 ... -
前行的路
2010-11-16 21:39 867时间一点一点的走过,心路一点一点的在拓展 走入社会身边的亲人 ... -
服务设计 谈论1
2010-11-11 11:50 811我一直觉得只有符合业 ... -
[心情很糟]体会到心情很糟阿,my life my choice!
2010-11-09 13:10 1080心情极度郁闷,忧郁 I have nothing, b ... -
0分作文——2010年普通高等学校招生考试上海卷作文题
2010-10-04 11:18 925此人是个人才 :) 2010 ... -
面向对象,真的必须设计数据对象吗?
2010-09-28 17:00 1743开发:JAVA 现在越来越觉得自己把dao或者是orm ... -
发展规律——由弱到强
2010-09-05 11:54 1145对于穷二代来说,创业是不容易的,最大的挑战来自家庭,其次才是金 ... -
在博源的日志——结束
2010-08-14 16:46 9132010-08-14日星期六 昨天是在博源的最后一天,在 ... -
在博源的日志——第3天
2010-08-12 10:24 11032010-08-11 博源第3天 一天我不知道自己做 ... -
在博源的日志——第一天
2010-08-12 10:23 9002010-08-09 博源第一天 一个大的办公室,大约50人 ...
相关推荐
在IT领域,尤其是在算法与数据结构的学习和应用中,“给定一个单调递增的整数序列,问某个整数是否在序列中”这个问题是极为常见的。这个问题的核心在于如何高效地在一个已排序的数组中查找特定元素的存在性。解决这...
- 如果输入的数小于0,则输出错误信息。 - 否则,调用`Transform`函数完成转换,并输出结果。 #### 技术细节分析 - **栈的选择**:由于栈是一种先进后出(FILO)的数据结构,非常适合用于此类数制转换问题。每次...
为了提高效率,还可以优化算法,例如,只检查小于或等于目标数平方根的数,因为大于平方根的因数必然有一个对应的因数小于或等于平方根。 在压缩包中的文件"2到10000的完全数"很可能是运行结果的输出文件,列出了2...
我们通常又将各二极与一个字节的 8 位对应,a(D0),b(D1),c(D2),d(D3),e(D4),f(D5),g(D6),h(D7), 相应 8 个发光二极管正好与单片机一个端口 Pn 的 8 个引脚连接,这样单片机就可以通过引脚输出高 低电平控制 8 个...
在这个特定的问题中,我们要利用分治法来实现“元素选择”,即找出线性序列集中第k小的元素及其位置。下面我们将深入探讨这个过程。 首先,理解问题的关键在于如何有效地比较并排序序列中的元素。分治法的基本步骤...
2. 不需要检查i的平方根之后的因子:如果i的一个因子大于它的平方根,那么另一个因子一定小于它的平方根。所以,我们只需要计算到i的平方根即可。 优化后的代码可能如下: ```java public class ...
7. 大于-1而小于3的整数共有5个。 8. 下列说法正确的是:若两数相等,则这两数的绝对值相等。 9. 冬季某天我国三个城市的最高气温分别是-10°C,1°C,-7°C,把它们从高到低排列正确的是:1°C,-7°C,-10°C。 10...
ceil() 函数与floor()正好相反,它用于获取大于或等于指定数值的最小整数值,即对浮点数进行向上取整操作。即使是0.0001这样的小数,也会进位到下一个整数。 - 使用方法:`ceil(value)` - 返回值:返回不小于参数...
对于长度为2004厘米的线段AB,如果线段的一端正好落在整数点上,那么覆盖的整点个数为2005,如果线段的一端不落在整数点上,那么覆盖的整点个数为2004。 5. **时差与数轴的关系**:可以用数轴来表示不同地方的国际...
例如,6是第一个完数,因为6的因数有1、2、3,它们相加的和正好是6。在编程领域,理解和找出完数是一个有趣的数学问题,可以用来练习基础的算法和数据结构。 本项目专注于寻找1000以内的完数,并提供了Delphi语言的...
边界值分析法通常会选择正好等于、刚刚大于或刚刚小于边界的值来进行测试。 **应用实例**:职工信息登记系统的数据要求,比如编号的范围为1到500,那么边界值应该包括0、1、2、499、500、501等。 #### 三、具体...
7. **分数的运算**:涉及到分数的加减乘除,以及分数与整数、小数的转换。例如,将一个苹果平均分成6份,取3份,就是苹果的1/2。 通过上述的讲解和练习题,学生能够深入理解分数的意义,掌握分数的基本性质,并能...
如果目标值大于或小于中间元素,则在数组大于或小于中间元素的那一半中查找,而且同样在这一半的中间元素开始。重复此过程,直到找到目标值,或者搜索范围为空。 2. **处理旋转**:对于旋转数组,我们需要考虑以下...
例如,783÷6,7大于6,所以商是三位数。对于715÷8,7小于8,商是两位数,估算时可以将715近似为720,720÷8=90,所以商大约是90。 2. **倍数关系** - 题目中提到75是5的( )倍,75的5倍是( )。理解倍数关系,75...
3. **数的组合与读写**:"一个数由 10 个 100,7 个 1、9 个 0.01 和 0.001 组成的数是( )",这里需要理解数位的概念,10个100是1000,7个1是7,9个0.01是0.09,0.001是0.001,所以这个数是1000 + 7 + 0.09 + 0....
奇数和偶数则是基于整数除以2的余数来区分的,奇数除以2余1,偶数则正好除尽。 总的来说,苏教版小学数学的知识点覆盖了基本的数学概念和运算规则,旨在帮助学生建立起对数字世界的理解和掌握,为进一步学习更复杂...
这可以通过遍历字符串并逐个字符减去字符'0'来完成,因为字符'0'到'9'在ASCII码表中的值正好对应0到9的整数。 2. **加法**:在实现加法函数`add`时,我们首先找到两个大整数中位数较多的那个,然后从低位到高位逐位...
如果大于等于106,则需要进行进位处理,并将当前位的结果调整为个位数。 3. **结果处理与输出** - 在相加完成后,结果数组`c`需要再次反转,以便从高位到低位输出结果。 - 输出结果时,需要注意数组下标是从高位...
这个程序的核心目标是检查一组边长是否能构成一个合法的几何三角形,根据欧几里得几何中的三角不等式原则:任意两边之和必须大于第三边。通过这样的测试,学习者可以理解基本的条件判断、边界条件处理以及异常管理等...
- 曾老师的彩带问题:根据给出的选项,可以发现每3条、4条、6条一组都可以正好分完,而每5条、7条、8条、9条一组会有剩余。 - 面粉问题:40袋面粉,每天吃6袋,可以吃6天,还剩4袋。 - 金鱼问题:小刚原来有20条...