`

整数分划Java

阅读更多

整数分划

正整数n的一个分划是指把n表示成若干个正整数的和。这里的分划与顺序无关,例如6=5+1 和 6=1+5即被认为是同一种分划。另外,这个整数本身也算一种分划。

例如,正整数n=6,可以分划为

6
5+1
4+2, 4+1+1
3+3, 3+2+1, 3+1+1+1
2+2+2, 2+2+1+1, 2+1+1+1+1
1+1+1+1+1+1

该问题是数论、组合数学、概率论、数理统计学、图论研究中的重要问题,在物理、数学研究中占据重要地位,并且它有很多延伸的应用。例如,网络传输中 与流密码安全性相关的某些问题。

产生一个正整数n的分划可以看成一个递归的过程。把n分解成n-i和i两部分(1≤i≤n),然后检查i或n-i是否可以继续被分解(只取其中较小 的那个进行继续分解,可以避免检查重复),直到最后分解完成。

输入:

待分解的正整数n

输出:

对应的排好序的分解,每行一个,中间用空格分开

样例输入:

6↵

样例输出:

6

5 1

4 2

4 1 1

3 3

3 2 1

3 1 1 1

2 2 2

2 2 1 1

2 1 1 1 1

1 1 1 1 1 1

 

 

import java.util.Scanner;
public class Main {
	public static void fun(int[] str,int n,int m){
		if(n==0)   
	        {      
	            for(int i=0;i<=m-1;i++)   
	            {      
	                if(i==(m-1))      
	                      System.out.println(str[i]);      
	                else     
	                	System.out.print(str[i]+" ");      
	            }       
	         }      
	         else  
	         {      
	            for(int i=n;i>=1;i--)   
	            {      
	               if(m==0||i<=str[m-1])   
	               {      
	                   str[m]=i;      
	                   fun(str,n-i,m+1);      
	               }      
	            }    
	         }
	}
			
	public static void main(String[] args) {
		Scanner scanner = new Scanner(System.in);
		int n = scanner.nextInt();
		fun(new int[n],n,0);
	}
}
 
分享到:
评论

相关推荐

    java整数分划

    正整数n的一个分划是指把n表示成若干个正整数的和。这里的分划与顺序无关,例如6=5+1 和 6=1+5即被认为是同一种分划。另外,这个整数本身也算一种分划。 例如,正整数n=6,可以分划为 6 5+1 4+2, 4+1+1 3+3, 3+2+1, ...

    java数组PPT课件PPT学习教案.pptx

    1. **数组的定义**:数组是一个变量,它在内存中划出连续的空间来存储相同数据类型的一组数据。例如,你可以声明一个`int`类型的数组来存储整数值。 ```java int[] numbers; ``` 2. **数组的声明和初始化**:...

    java面试基础总结.doc

    - **快速排序**:基于分治策略,选取基准值,划分子序列,递归排序,平均时间复杂度O(n log n)。 - **选择排序**:每次找到未排序部分的最小(大)值,放到正确位置,时间复杂度O(n^2)。 - **插入排序**:将未...

    用分治法求最大最小值JAVA为例

    1. **定义递归函数**:在这个问题中,我们需要创建一个名为`findMinMax`的递归函数,它接受一个整数数组`arr`和数组的起始索引`start`与结束索引`end`作为参数。该函数的目的是找到数组在给定范围内的最大值和最小值...

    2014华为校园招聘上机题

    7. **将整数倒序输出,剔除重复数据**:涉及到整数的位操作,可能需要将整数转换为字符串,然后反转字符串并去重。 8. **大数相减**:大数运算通常需要用到字符串存储,然后逐位进行减法运算,注意进位和借位的情况...

    zxing源码分析——DataMatrix码部分

    DataMatrix 码是一种二维码,zxing 是一个 Java 库,用于解析和生成各种二维码。 在 zxing 源码中,DataMatrix 码部分的代码结构与 QR 码基本相同。Detector 的功能是从原始图像中找出符号码的部分,并进行透视转换...

    public class Aa.docx

    - **递归调用**:快速排序算法的核心在于递归调用自身,通过不断地划分子数组,直到子数组中只剩下一个元素或没有元素为止。 以上就是从给定文档中提取的主要IT知识点。这些知识点涵盖了Java编程的基础语法、数组...

    小素数生成器设计文档1

    厄拉多塞斯筛法(Sieve of Eratosthenes)是一种古老的寻找素数的方法,其基本思路是从2开始,依次将所有素数的倍数划去,保留下来的未被划去的数字即为素数。该方法简单高效,尤其适用于生成较小范围内的素数列表。...

    华为2014校园招聘上机题(1).pdf

    这个题目可能要求应聘者编写一个程序,根据设定的及格分数(比如60分),将一组考试成绩进行筛选,找出及格与不及格的名单。这涉及到基础的数据处理和条件判断。 2. **样题-中级题:亮着电灯的盏数** 可能涉及...

    计算机基础知识点.docx

    这一划时代的发明被誉为“电子大脑”的诞生,但它存在着一个致命的缺陷——没有存储程序的能力。 2. **计算机的发展历程**: - **第一代 (1946-1958)**:以电子管为主要元件的计算机,主要用于科学计算和军事计算...

Global site tag (gtag.js) - Google Analytics