求一道java程序设计题(整数划分)

Python054

求一道java程序设计题(整数划分),第1张

这个可以用递归来实现。。。。。代码如下。。。还是想了很久弄出来的。。。。已经测试了的。。。希望能帮到你。。。

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.Scanner

public 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,直接返回递归分解的个数。