题解 | #放苹果#

放苹果

https://www.nowcoder.com/practice/bfd8234bb5e84be0b493656e390bdebf

import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;

public class Main {
    public static void main(String[] args) {
        BufferedReader r = new BufferedReader(new InputStreamReader(System.in));
        String a;
        try {
            a = r.readLine();
        } catch (IOException e) {
            throw new RuntimeException(e);
        }
        // 有一个盘子为空!=>有多个盘子为空,反而,有多个盘子为空=>有一个盘子为空
        // 有一个盘子为空的分法,包含进了有多个盘子为空的所有分法
        // 换言之,求出了只有一个盘子为空的分法,这些分法里面就包括有多个盘子为空的情况
        // 有一个盘子为空的反面是所有盘子里面都有苹果
        // !(p1!=0 && p2!=0 && p3!=0 && p4!=0 && p5!=0 && p6!=0 && p7!=0)==(p1==0 || p2==0 || p3==0 || p4==0 || p5==0 || p6==0)
        // 上式中,等于运算符右侧表示至少有一个盘子是空的情况
        char[] chs = a.toCharArray();
        int i = 0, k = 0, l = chs.length, t = 0, m = 0, n = 0;
        while (i < l) {
            if (chs[i] == ' ') {
                if (k > 0) m = t;
                t = 0;
                k = 0;
                i++;
                continue;
            }
            k++;
            t *= 10;
            t += chs[i] - '0';
            if (i == l - 1) n = t;
            i++;
        }
        System.out.print(getDiv(m, n));
    }

    private static int getDiv(int m, int n) {
        if (n < 0 || m < 0) return 0;
        if (m == 1 || n == 1) return 1;
        return getDiv(m, n - 1) + getDiv(m - n, n);
    }
}

全部评论

相关推荐

机械打工仔:第一位颇有孟德之志
点赞 评论 收藏
分享
评论
点赞
收藏
分享

创作者周榜

更多
牛客网
牛客网在线编程
牛客网题解
牛客企业服务