java 递归题目_java递归实现一acm题

题目要求:

求满足从1开始,某一整数以内的数组合相加等于其本身的各种情况

例如:整数20,求组合相加等于20的情况:

1 19

1 2 17

1 2 3 14

1 2 3 4 10

1 2 3 5 9

1 2 3 6 8

1 2 4 13

.

.

.

7 13

8 12

9 11

不能重复,交换顺序视为同一种情况。

package alibaba;

import java.util.HashSet;

import java.util.Scanner;

import java.util.Set;

public class combination {

static int count = 0;

public static void combine(int index,int sum,Set set){

if(set== null){

set = new HashSet();

}

if( index < sum/2){//递归入口,sum如果能分成两个比index都大的数则进行递归,否则此轮递归结束,回溯继续运行。

int i = index + 1;

int temp = 0;

set.add(index);

if(sum%2 == 0){

temp = sum /2;

}else temp = sum/2 +1;

count++;

System.out.print(count+": ");

for (Integer integer : set) {

System.out.print(integer+" ");

}

System.out.println(sum);

for(;i

set.add(i);

combine(i, sum-i,set);

set.remove(i);

}

}

else{

set.add(index);

set.add(sum);

count++;

System.out.print(count+": ");

for (Integer integer : set) {

System.out.print(integer+" ");

}

System.out.println();

set.remove(index);

set.remove(sum);

}

}

public static void main(String[] args) {

Scanner scanner = new Scanner(System.in);

System.out.println("请输入两个整数");

int index = scanner.nextInt();

int sum = scanner.nextInt();

for(int i=index; i

combine(i,sum-i,null);

}

System.out.println("方案总数为:"+count);

}

}

输出结果:

请输入两个整数

1

20

1: 1 19

2: 1 2 17

3: 1 2 3 14

4: 1 2 3 4 10

5: 1 2 3 5 9

6: 1 2 3 6 8

7: 1 2 4 13

8: 1 2 4 5 8

9: 1 2 4 6 7

10: 1 2 5 12

11: 1 2 6 11

12: 1 2 7 10

13: 1 2 8 9

14: 1 3 16

15: 1 3 4 12

16: 1 3 4 5 7

17: 1 3 5 11

18: 1 3 6 10

19: 1 3 7 9

20: 1 4 15

21: 1 4 5 10

22: 1 4 6 9

23: 1 4 7 8

24: 1 5 14

25: 1 5 6 8

26: 1 6 13

27: 1 7 12

28: 1 8 11

29: 1 9 10

30: 2 18

31: 2 3 15

32: 2 3 4 11

33: 2 3 4 5 6

34: 2 3 5 10

35: 2 3 6 9

36: 2 3 7 8

37: 2 4 14

38: 2 4 5 9

39: 2 4 6 8

40: 2 5 13

41: 2 5 6 7

42: 2 6 12

43: 2 7 11

44: 2 8 10

45: 3 17

46: 3 4 13

47: 3 4 5 8

48: 3 4 6 7

49: 3 5 12

50: 3 6 11

51: 3 7 10

52: 3 8 9

53: 4 16

54: 4 5 11

55: 4 6 10

56: 4 7 9

57: 5 15

58: 5 6 9

59: 5 7 8

60: 6 14

61: 7 13

62: 8 12

63: 9 11

方案总数为:63

分享到:

18e900b8666ce6f233d25ec02f95ee59.png

72dd548719f0ace4d5f9bca64e1d7715.png

2010-11-10 12:28

浏览 1559

评论

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值