import
java.util.Scanner
public
class
Test
{
public
static
void
huafenD(int
oldData,int
j,
int
n,StringBuffer
result){
StringBuffer
r
=
new
StringBuffer(result)
for(
int
i
=
ji<=ni++){
if(i==n&&i!=oldData)
{
result.append(i)
System.out.println(result.toString())
result
=
new
StringBuffer(r)
}
else
if(i!=oldData){
result.append(i)
result.append("+")
huafenD(oldData,i,n-i,result)
result
=
new
StringBuffer(r)
}
}
}
public
static
void
main(String
args[])
{
Scanner
in
=
new
Scanner(System.in)
System.out.println("请输入一个整数(1-10)")
int
data
=
in.nextInt()
while(data<1||data>10){
System.out.println("您的输入
不符合要求,请重新输入")
data
=
in.nextInt()
}
if(data==1)System.out.println("无需划分")
else
{
StringBuffer
sb
=
new
StringBuffer()
huafenD(data,1,data,sb)
}
}
}
运行结果示例:
请输入一个整数(1-10)
6
1+1+1+1+1+1
1+1+1+1+2
1+1+1+3
1+1+2+2
1+1+4
1+2+3
1+5
2+2+2
2+4
3+3
我给你写一个,要给分的呦。代码如下:import java.util.ArrayList
import java.util.List
public class Testxxx {
public void chaifen(int n){
List list = new ArrayList()
chaifendigui(n,list)
}
public void chaifendigui(int n, List list) {
// TODO Auto-generated method stub
for (int i = 1i <= ni++) {
System.out.print(i+" ")
if(n>i){
List list2 = new ArrayList()
list2.addAll(list)
list2.add(i)
chaifendigui(n-i,list2)
}else{
System.out.println()
for (int j = 0j <list.size()-1j++) {
System.out.print(list.get(j)+" ")
}
}
}
}
public static void main(String[] args) {
Testxxx xx = new Testxxx()
xx.chaifen(10)
}
}
import java.util.Scannerpublic class numberDiv {
// private static final huafen numberrDiv = null
// static int d[]=new int[32]
public static void main(String[] args) {
System.out.println("请输入的整数:")
Scanner sc = new Scanner(System.in)
int number = sc.nextInt()
int num = numberDiv.Division(number, number, "")
System.out.println("num=" + num)
}
public static int Division(int m, int n, String str) {
if ((m <= 0) || (n <= 0))
return 0
if ((m == 1) || (n == 1)) {
System.out.print(str)
for (int i = 1 i < m i++) {
System.out.print("1+")
}
System.out.println("1")
return 1
}
if (n == m) {
System.out.println(str + m)
return 1 + numberDiv.Division(m, n - 1, str)
}
if (m > n) {
int n1 = numberDiv.Division(m - n, n, str + n + "+")
int n2 = numberDiv.Division(m, n - 1, str)
return n1 + n2
}
return numberDiv.Division(m, m, str)
}
}
Division方法返回分解的个数,所以numberDiv类不需要再定义成员变量static int num=0。
Division方法中if ((m == 1) || (n == 1))成立时,本次是一个分解,并且不需要再递归分解,所以返回1。
Division方法中if (n == m)成立时,本次是一个分解,且需要递归分解,所以返回1+递归分解个数。
Division方法中if (m >n)成立时,返回两个递归分解的个数之和。
Division方法中最后代码即为m <n,直接返回递归分解的个数。