- 浏览: 121841 次
- 性别:
- 来自: 抽象空间
最新评论
-
Dancen:
理想状态下jar包的更新当然不应该去修改其中的方法签名等外部依 ...
javamake.jar & javamake-ant15.jar -
mwei:
Dancen 写道javamake可以解决代码之间的依赖问题, ...
javamake.jar & javamake-ant15.jar -
Dancen:
javamake可以解决代码之间的依赖问题,但如果调用的是外部 ...
javamake.jar & javamake-ant15.jar -
kidding87:
看到了楼主的connet by用法,又看到这个很久以前的东西, ...
海螺式初始化二维数组 -
pxlfxl2:
mwei 写道pxlfxl2 写道如果我的需求是要打印A到Z ...
三线程顺序打印N次ABC
原题出处:http://www.iteye.com/topic/927532
使用OO的方式实现会占用更多的内存,在递归调用的时候需要保存每次参数,对性能大打折扣,加大JVM参数到256M后,使用1000测试都会宕掉,然而这里演示的是一种解题思路。
初步结构分析:
java代码如下:
对30测试结果如下:
使用OO的方式实现会占用更多的内存,在递归调用的时候需要保存每次参数,对性能大打折扣,加大JVM参数到256M后,使用1000测试都会宕掉,然而这里演示的是一种解题思路。
初步结构分析:
/** * 将一个自然数拆分为若干不重复自然数之和。 * 以10为例: * 1+9 --对原数据(10)的初次拆分(拆为m+n)应该很容易 * |_2+7 --对9拆分为x+y,x应该大于1,这样就避免了因子重复 * |_3+4 --对7拆分为i+j,i应该大于2,以此规律持续下去 * |_3+6 --此处依然对9拆分 * |_4+5 * 2+8 * |_3+5 * 3+7 --7,在此处无法拆分,否则导致重复 * 4+6 */
java代码如下:
import java.util.ArrayList; import java.util.List; public class SplitNumber { public static void main(String[] args) { SplitNumber.split(30); System.out.println("=>DONE..."); } public static void split(int number){ if(number<3){ System.out.println(number+"=>can not split..."); return; } List<Splitor> outer=new ArrayList<Splitor>(); int half=(number+1) >> 1; //+1 计算奇数与偶数的一半 Splitor s=null; for(int i=1;i<half;i++){ //for-loop:初次拆分为m+n s=new Splitor(); s.smaller=i; // s.bigger=number-i; outer.add(s); s.splitCenter(s); //是对m+n中的n进行深度拆分 } // end for for(Splitor t:outer){ //上面拆分完毕后输出 showRetHelper(t.splitors,t); } } /** * 这个递归很恶心:它要把保存每次传入的参数 * @param sps 按照顺序保存传入的参数 */ private static void showRetHelper(List<Splitor> splitors,Splitor... sps){ int len=sps.length; for(int i=0;i<len;i++){ //每次递归前都要先输出各个因子 if(len==1){ //只有一个就输出 smaller+bigger System.out.print(sps[0]+" "); break; } if(i==len-1){ //最后一个同样输出 smaller+bigger System.out.print(sps[i]+" "); }else { System.out.print(sps[i].smaller+"+"); //不是最后一个就输出小的那个数 } } System.out.println(""); //换行 for(Splitor s:splitors){ showRetHelper(s.splitors,copyArray(sps,s)); //保存每次的参数,递归 } } private static Splitor[] copyArray(Splitor[] src, Splitor s){ //不多说 if(src==null || src.length==0){ return new Splitor[]{s}; }else{ int srcLength=src.length; Splitor[] dest=new Splitor[srcLength+1]; System.arraycopy(src, 0, dest, 0, srcLength); dest[srcLength]=s; return dest; } } //内部类:对数据的包装 private static class Splitor{ private int smaller; private int bigger; private List<Splitor> splitors=new ArrayList<Splitor>(); //作用:构造树 private void add(Splitor s){ this.splitors.add(s); } public void splitCenter(Splitor s){ int half=(s.bigger+1) >>1; //+1 计算奇数与偶数的一半,用于for里的小于 int small=s.smaller+1; //+1 防止重复 if(small>=half) return; Splitor s2=null; for(int i=small;i<half;i++){ s2=new Splitor(); s2.smaller=i; s2.bigger=s.bigger-i; s.add(s2); //s指向s.bigger被拆分的结果集 splitCenter(s2); //recursively 持续拆分 } } @Override public String toString(){ return smaller+"+"+bigger; } } }
对30测试结果如下:
1+29 1+2+27 1+2+3+24 1+2+3+4+20 1+2+3+4+5+15 1+2+3+4+5+6+9 1+2+3+4+5+7+8 1+2+3+4+6+14 1+2+3+4+7+13 1+2+3+4+8+12 1+2+3+4+9+11 1+2+3+5+19 1+2+3+5+6+13 1+2+3+5+7+12 1+2+3+5+8+11 1+2+3+5+9+10 1+2+3+6+18 1+2+3+6+7+11 1+2+3+6+8+10 1+2+3+7+17 1+2+3+7+8+9 1+2+3+8+16 1+2+3+9+15 1+2+3+10+14 1+2+3+11+13 1+2+4+23 1+2+4+5+18 1+2+4+5+6+12 1+2+4+5+7+11 1+2+4+5+8+10 1+2+4+6+17 1+2+4+6+7+10 1+2+4+6+8+9 1+2+4+7+16 1+2+4+8+15 1+2+4+9+14 1+2+4+10+13 1+2+4+11+12 1+2+5+22 1+2+5+6+16 1+2+5+6+7+9 1+2+5+7+15 1+2+5+8+14 1+2+5+9+13 1+2+5+10+12 1+2+6+21 1+2+6+7+14 1+2+6+8+13 1+2+6+9+12 1+2+6+10+11 1+2+7+20 1+2+7+8+12 1+2+7+9+11 1+2+8+19 1+2+8+9+10 1+2+9+18 1+2+10+17 1+2+11+16 1+2+12+15 1+2+13+14 1+3+26 1+3+4+22 1+3+4+5+17 1+3+4+5+6+11 1+3+4+5+7+10 1+3+4+5+8+9 1+3+4+6+16 1+3+4+6+7+9 1+3+4+7+15 1+3+4+8+14 1+3+4+9+13 1+3+4+10+12 1+3+5+21 1+3+5+6+15 1+3+5+6+7+8 1+3+5+7+14 1+3+5+8+13 1+3+5+9+12 1+3+5+10+11 1+3+6+20 1+3+6+7+13 1+3+6+8+12 1+3+6+9+11 1+3+7+19 1+3+7+8+11 1+3+7+9+10 1+3+8+18 1+3+9+17 1+3+10+16 1+3+11+15 1+3+12+14 1+4+25 1+4+5+20 1+4+5+6+14 1+4+5+7+13 1+4+5+8+12 1+4+5+9+11 1+4+6+19 1+4+6+7+12 1+4+6+8+11 1+4+6+9+10 1+4+7+18 1+4+7+8+10 1+4+8+17 1+4+9+16 1+4+10+15 1+4+11+14 1+4+12+13 1+5+24 1+5+6+18 1+5+6+7+11 1+5+6+8+10 1+5+7+17 1+5+7+8+9 1+5+8+16 1+5+9+15 1+5+10+14 1+5+11+13 1+6+23 1+6+7+16 1+6+8+15 1+6+9+14 1+6+10+13 1+6+11+12 1+7+22 1+7+8+14 1+7+9+13 1+7+10+12 1+8+21 1+8+9+12 1+8+10+11 1+9+20 1+10+19 1+11+18 1+12+17 1+13+16 1+14+15 2+28 2+3+25 2+3+4+21 2+3+4+5+16 2+3+4+5+6+10 2+3+4+5+7+9 2+3+4+6+15 2+3+4+6+7+8 2+3+4+7+14 2+3+4+8+13 2+3+4+9+12 2+3+4+10+11 2+3+5+20 2+3+5+6+14 2+3+5+7+13 2+3+5+8+12 2+3+5+9+11 2+3+6+19 2+3+6+7+12 2+3+6+8+11 2+3+6+9+10 2+3+7+18 2+3+7+8+10 2+3+8+17 2+3+9+16 2+3+10+15 2+3+11+14 2+3+12+13 2+4+24 2+4+5+19 2+4+5+6+13 2+4+5+7+12 2+4+5+8+11 2+4+5+9+10 2+4+6+18 2+4+6+7+11 2+4+6+8+10 2+4+7+17 2+4+7+8+9 2+4+8+16 2+4+9+15 2+4+10+14 2+4+11+13 2+5+23 2+5+6+17 2+5+6+7+10 2+5+6+8+9 2+5+7+16 2+5+8+15 2+5+9+14 2+5+10+13 2+5+11+12 2+6+22 2+6+7+15 2+6+8+14 2+6+9+13 2+6+10+12 2+7+21 2+7+8+13 2+7+9+12 2+7+10+11 2+8+20 2+8+9+11 2+9+19 2+10+18 2+11+17 2+12+16 2+13+15 3+27 3+4+23 3+4+5+18 3+4+5+6+12 3+4+5+7+11 3+4+5+8+10 3+4+6+17 3+4+6+7+10 3+4+6+8+9 3+4+7+16 3+4+8+15 3+4+9+14 3+4+10+13 3+4+11+12 3+5+22 3+5+6+16 3+5+6+7+9 3+5+7+15 3+5+8+14 3+5+9+13 3+5+10+12 3+6+21 3+6+7+14 3+6+8+13 3+6+9+12 3+6+10+11 3+7+20 3+7+8+12 3+7+9+11 3+8+19 3+8+9+10 3+9+18 3+10+17 3+11+16 3+12+15 3+13+14 4+26 4+5+21 4+5+6+15 4+5+6+7+8 4+5+7+14 4+5+8+13 4+5+9+12 4+5+10+11 4+6+20 4+6+7+13 4+6+8+12 4+6+9+11 4+7+19 4+7+8+11 4+7+9+10 4+8+18 4+9+17 4+10+16 4+11+15 4+12+14 5+25 5+6+19 5+6+7+12 5+6+8+11 5+6+9+10 5+7+18 5+7+8+10 5+8+17 5+9+16 5+10+15 5+11+14 5+12+13 6+24 6+7+17 6+7+8+9 6+8+16 6+9+15 6+10+14 6+11+13 7+23 7+8+15 7+9+14 7+10+13 7+11+12 8+22 8+9+13 8+10+12 9+21 9+10+11 10+20 11+19 12+18 13+17 14+16 =>DONE...
发表评论
-
泛型<T>的转换问题
2011-04-28 15:03 2在问答里提问,没有得到答案,特开此贴讨论。 代码如下: ... -
fibonacci的几种实现及尾递归
2011-03-27 22:55 3780/** * java version "1. ... -
自然数m的立方可写成m个连续奇数之和
2010-10-22 09:49 4416题目: 任何一个自然数m的立方均可写成m个连续奇数之和。 例如 ... -
使用内部类实现多重继承
2010-09-07 19:10 1106最常见的实现多重继承的方式,是implements inter ... -
怎么捕获webwork下载文件时的异常
2010-08-09 17:02 1009使用webwork的文件下载方式,action配置如下: ... -
java.rmi.UnmarshalException: invalid method hash
2010-07-30 16:25 4072今天在应用程序中报了下面异常: java.rmi.Serv ... -
转:java 获取ftp文件大小
2010-07-30 11:46 9781【注】:本代码摘自 http://www.java2s.com ... -
判断字符串是否是数字
2010-03-13 14:47 1043看到一笔试题,如题; 《c程序设计语言》第二版5.2节里有ge ... -
练习:生产者-消费者
2010-03-03 14:50 947关于Object.wait()和Object.notify() ... -
三线程顺序打印N次ABC
2010-02-27 15:17 3023记得前一阵子JE上讨论线程顺序打印的面试题,现在有空也练练。 ... -
求数组的平衡点
2010-02-27 14:47 2040原文见:http://www.iteye.com/topic/ ... -
怎么记忆Thread.join()
2010-02-23 16:57 2545Thread.join() JDK_API:等待该线程终止。 ... -
海螺式初始化二维数组
2009-12-13 22:33 1395原题见:http://www.iteye.com/topic/ ... -
初涉java多线程(二)
2009-12-04 23:10 945原文:http://huagenli.iteye.com/bl ... -
Collection’modifiers seem not correct when reflect
2009-12-03 22:48 991做练习的时候就抄了如下方法 public static v ... -
对private static 实例变量同步,线程获得的是什么锁?
2009-11-29 11:01 1141初学线程,还是比较愚的。 问题如题,就是在方法中加了synch ... -
初涉java多线程(一)
2009-11-23 22:14 904十一期间看了一点java多 ... -
new StringBuilder() VS new StringBuilder(arg)
2009-09-30 17:35 1298StringBuilder,非线程安全 ... -
一种截取字母汉字混合串的方法(String.getBytes)
2009-08-09 21:37 2097/** * 按字节截取字符串 * @para ... -
一种截取字母汉字混合串的方法(String.split)
2009-08-08 23:28 1626/** * 按字节截取字符串 * @ ...
相关推荐
编写一个程序。要求将一个自然数拆分成任意个自然数相加,要求这几个数的乘积是最大的 自然数n拆分成m个自然数,要求这几个数的乘积是最大的,必为n/m及其临近数.
2.对于任何一个大于1的自然数n,总可以拆分成若干个小于n的自然数之和:n=n1+n2+…+nk,其中1≤n1 ≤ n2 ≤ … ≤ nk,k≥1。自然数n的这种表示称为自然数拆分问题。试求自然数n的所有不同的拆分。
一个自然数拆分成N个自然数之和的所有情况
拆分自然数的几种算法,用了递归和回溯法。
c++ 实现一个自然数表示成几个自然数的和,输出所有自然数和的表示方式
整数拆分整数拆分整数拆分整数拆分整数拆分整数拆分整数拆分整数拆分
本程序用CUDA编程在linux环境下实现了判断一个自然数是否为素数的操作。
输入一个自然数n,求1~n之间的所有自然数之和。
输出自然数1到n的所有不重复的排列,即n的全排列。
SF1.4-自然数拆分.cpp
第一行是两个整数n和x,n表示自然数的个数,x表示要查找的自然数,两者之间用空格隔开; 第2至n+1每行一个自然数。 Output 对应每组输入,如果查找到x,则每行输出两个整数,分别是自然数和该数出现的次数,其间...
最大公约数:如果有一个自然数a能被自然数b整除,则称a为b的倍数,b为a的约数。几个自然数公有的约数,叫做这几个自然数的公约数。公约数中最大的一个公约数,称为这几个自然数的最大公约数。
一个自然数幂和公式的推导,陆多俊,,本文从对递推关系求解的角度,推导出自然数幂和的组合数表达形式。为计算机求解幂和问题提供了方法和依据。
属于课程实例,输出一个自然数的各项因子。
C语言程序设计-求一个n位自然数的各位数字的积;(n 是小于10的自然数).c
(2) 在n的左边加上一个自然数,但该自然数不能超过最近添加的数的一半; (3) 按此规则进行处理,直到不能再添加自然数为止。 例如,set(6)={6,16,26,126,36,136}。半数集set(6)中有6 个元素。 注意半数集是多重集...
设计一个算法,将一个结点值自然数的单链表拆分为两个单链表,原表中保留值为偶数的结点,而值为奇数的结点按它们在原表中的相对次序组成一个新的单链表。
把5拆分成若干无序正整数的和(若干可以包含1),请问有多少种拆分方法? 直接用枚举法实现: 5 = 5 5 = 4+1 5 = 3+2 5 = 3+1+1 5 = 2+2+1 5 = 2+1+1+1 5 = 1+1+1+1+1 很显然,结果为7。注意这里5 = 4+1和5=1+4是...
写一个程序,对于给定的一个自然数N(1),和M个互不相同的十进制数字X1, X2,…,XM (M>=1), 找出N的一个最小的正倍数,使得该倍数中仅包含数字X1,X2,…,XM。 【输入形式】 输入文件为当前目录下的...
对任意给定的一个自然数n,将分母小于等于n的不可约的真分数按升序排列,并且在第一个分数之前加上0/1,在最后一个分数之后加上1/1,这个序列称为n级法雷数列,以Fn表示。如F5为:0/1,1/5, 1/4, 1/3, 2/5, 1/2, 3/5,...