`
zhsq_java
  • 浏览: 61488 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类

拆解数字

    博客分类:
  • java
阅读更多
论坛上看到的一个题目:
http://www.iteye.com/topic/963980

将任一个数字进行拆解,例如: 
 
3 = 2+1 = 1+1+1 所以3有三種拆法 
4 = 3 + 1 = 2 + 2 = 2 + 1 + 1 = 1 + 1 + 1 + 1 共五種 
5 = 4 + 1 = 3 + 2 = 3 + 1 + 1 = 2 + 2 + 1 = 2 + 1 + 1 + 1 = 1 + 1 +1 +1 +1 共七种 
 
 
随便给一个数字,对其进行拆解,并打印可拆解情况和拆解结果数。 

public class SplitNum {
	public static void main(String[] args) {
		System.out.println("一共有" + splitNumber(10) + "种分法");
	}

	public static int splitNumber(int a) {
		return splitNumberWithMax(a, a, 0, a+" = ");
	}

	private static int splitNumberWithMax(int max, int tag, int c, String s) {
		if (tag == 1 || tag == 0) {
			System.out.println(tag == 1 ? (s + tag ) : s.substring(0,s.length()-2));
			c++;
		} else {
			for (int i = (max >= tag ? tag : max); i > 0; i--) {
				c = splitNumberWithMax(i, tag - i, c, s + i + " + ");
			}
		}
		return c;
	}
}



利用循环,不用递归,不用怎么担心内存的问题。
import java.util.Stack;

public class SplitNum2 {
	public static void main(String[] args) {
		System.out.println(splitNum(200));
	}
	
	public static int splitNum(int tag){
		int a,b;
		int c = 0;
		Stack<Integer> s = new Stack<Integer>();
		s.push(tag);
		while(true){
			c++;
			System.out.print(c+":");
			print(s);
			while (!s.isEmpty() && s.peek() == 1) {
				s.pop();
			}
			if (s.isEmpty())break;
			a = s.pop();
			s.push(--a);
			do {
				b = tag - sum(s);
				if (b==0)break;
				s.push(a<b?a:b);
			} while (true);
		}
		return c;
	}
	private static int sum(Stack<Integer> s){
		int sum = 0;
		for (int i:s) {
			sum += i;
		} 
		return sum;
	}
	
	private static void print(Stack<Integer> s){
		for (int i:s) {
			System.out.print(i+"+");
		} 
		System.out.println();
	}

}

分享到:
评论

相关推荐

    以和府捞面为例,拆解数字化【会员策略】.pdf

    以和府捞面为例,拆解数字化【会员策略】.pdf

    C经典算法之数字拆解

    根据给定的信息,本文将详细解析“C经典算法之数字拆解”这一主题,包括算法原理、代码解读以及实现思路。 ### 算法背景与原理 #### 数字拆解问题定义 数字拆解问题是一种经典的组合数学问题,其目标是求出一个正...

    行业分类-设备装置-利用三维数字化平台进行设备拆解模拟的方法和系统.zip

    "行业分类-设备装置-利用三维数字化平台进行设备拆解模拟的方法和系统"这一主题,揭示了现代工业如何借助先进的数字工具提高工作效率和精度。 三维数字化平台是一种集成化、智能化的技术平台,它能够将实体设备以...

    数字化改革v字模型-可编辑

    数字化改革v字模型-可编辑...数字化改革v字模型-可编辑是指一种基于任务分解和数据集成的数字化改革方法,该方法通过逐级拆解、确定协同关系、建立指标体系、确定数据需求等步骤,逐步构建起一个完整的数字化改革框架。

    GIF拆解&组合

    总的来说,GIF拆解与组合是数字图像处理的重要组成部分,它为内容创作者提供了更多的可能性。无论是为了编辑现有的GIF,还是创作新的动态内容,掌握这一技能都能大大提高效率和创新性。同时,随着技术的发展,越来越...

    三菱FX2N PLC 拆解图片

    4. **输入/输出接口**:FX2N PLC通常有多种类型的I/O接口,如数字量输入/输出、模拟量输入/输出,以适应不同的传感器和执行器。拆解过程中能看到这些接口的物理布局和连接方式。 5. **电源模块**:为PLC各部分提供...

    西师二年级下册数学一单元数数时PPT课件.pptx

    通过这样的练习,孩子们可以更好地理解和拆解数字。 5. 大数的认识:课件通过实例教授学生如何理解和表达大数,如一千零五十由1个千和5个十组成,二千零一十由2个千和10个十组成。这有助于培养孩子的数感,理解大数...

    2021-2025年中国废电拆解行业调研及数字营销战略研究报告.pdf

    在2021至2025年期间,中国废电拆解行业的发展和数字营销战略是当前经济与环保双重背景下受到关注的话题。这份报告深入分析了废电拆解行业的发展现状、政策环境、行业趋势以及数字营销战略的选择与实施。 在废电拆解...

    新北师大版一年级数学下册第一次月考卷.doc

    3. 15-9的思考过程:让学生理解如何拆解数字进行计算,如15-9可以通过10-5和5+4来完成。 4. 13-8的思考:引导学生通过加法逆向思维进行减法计算,例如8加5等于13,所以13减8等于5。 5. 符号比较:比较大小,训练学生...

    天猫精灵M1智能音箱拆解

    - **数字功放**:采用了TI的TAS5733L数字功放芯片,支持I2S输入,最大输出功率可达10W,保证了良好的音质效果。 - **电源管理**:使用TI的TPS562208同步降压转换器进行电源管理,该芯片能够在4.5-17V的宽电压范围...

    元器件应用中的拆解安捷伦电源/测量单元(SMU)

    【元器件应用中的拆解安捷伦电源/测量单元(SMU)】 安捷伦电源/测量单元(SMU)是一种高度精密的测试设备,常用于半导体器件的测量和表征。Dave Jones在他的EEVblog中拆解了Agilent B2912A型号的SMU,揭示了其内部...

    华为主动降噪耳机3拆解

    华为2018年上市的一款采用数字芯片方案的主动降噪耳机拆解

    基于PLC的报废汽车拆解线作业控制系统.pdf

    首先,PLC(Programmable Logic Controller,可编程逻辑控制器)是一种用于自动化控制的电子设备,它采用可编程的存储器,用于其内部存储执行逻辑运算、顺序控制、定时、计数和算术运算等操作的指令,并通过数字或...

    数字拆解.zip

    算法是解决特定问题或执行特定任务的一系列步骤或规则的有序集合。在计算机科学中,算法通常用来指导计算机执行特定的任务或解决问题。良好设计的算法能够有效地解决问题,并且在给定的输入下能够产生正确的输出。...

    compaq系列笔记本拆解 教程

    - **键盘**: 标准全尺寸键盘,带有独立的数字小键盘区域。 - **触控板**: 支持多点触摸功能,便于实现手势操作。 - **音频**: 内置扬声器和支持麦克风输入。 - **摄像头**: 高清网络摄像头,方便视频通话和会议使用...

    flash文件拆解器

    在数字媒体领域,Flash曾是网页动画和交互设计的重要工具,而“Flash文件拆解器”则为开发者和设计师提供了深入探索SWF文件内容的窗口。本文将详细解析Flash文件拆解器的功能、工作原理以及其在实际应用中的价值。 ...

    蓝桥杯培训教程+逻辑推理+排序+ 图形(矩阵)+ 数字变幻+ 数字组合与拆解+字符串+ 数制转换+排列组合等

    蓝桥杯培训教程 一、 逻辑推理 二、排序 三、 图形(矩阵) 四、 数字变幻 五、 数字组合与拆解 六、 字符串 七、 数制转换 八、 排列组合 九、 其它 十、 数据结构

Global site tag (gtag.js) - Google Analytics