简单算法:把一个数分解成几个数之和

小白记录,大佬勿喷!!

/**分析
 2  1+1;
 3 1+2,1+1+1
 4 1+3,2+2,1+1+2,1+1+1+1
 5 1+4,2+3,1+1+3,1+2+2,1+1+1+2,1+1+1+1+1
 6 1+5 2+4 3+3 1+1+4 1+2+3 1+1+1+3 1+1+2+2 1+1+1+1+2 1+1+1+1+1+1
 *代码实现
 * 1.定义一个外部变量(用来记录递归的次数)
 * 2.定义一个静态方法,进行调用
 * 3.两种情况分别为a为奇数和偶数的情况
 * (1)a为偶数时,两数相加最先显示的应该是1+(a-1),最后一个是a/2+a/2,判断我们定义的count是否大于0,
 * 如果大于0,循环打印1+,根据count的值确定打印次数,如果小于等于0,只打印两数相加的结果;
 *(2)a为技术时同理,不过判断循环次数时应该a/2+1;
 * 4.通过a-1,作为下次遍历的输入值,并且进行count++,进入下次循环可以用来判断,打印多少个1+
 * 5.加上一个退出条件s<2;
 * 6.进行下次遍历
 */
public class ques4 {
    public static int count=0;
    public static void main(String[] args) {
        js(6);
    }


    public static int js(int a) {
        if (a % 2 == 0) {
            for (int i = 1; i <= a / 2; i++) {
                if(count>0){
                for(int m=0;m<count;m++){
                    System.out.print(1+"+");
                }
                }
                System.out.println(i + "+" + (a - i));
            }
        }
        if (a % 2 == 1) {
            for (int i = 1; i < a / 2 + 1; i++) {
                if(count>0){
                    for(int m=0;m<count;m++){
                        System.out.print(1+"+");
                    }
                }
                System.out.println(i + "+" + (a - i));
            }
        }
        int s=a-1;
        count++;
        if(s<2){
            return 0;
        }
            return js(s);
    }
}

控制台输出:

1+5
2+4
3+3
1+1+4
1+2+3
1+1+1+3
1+1+2+2
1+1+1+1+2
1+1+1+1+1+1

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值