zoukankan      html  css  js  c++  java
  • Java整数划分问题

    对于一个给定的n(n>=1),计算最大加数不超过m的方案数量
    对n和m分情况讨论,详见代码

    import java.util.Scanner;
    
    public class Integer整数划分 {
    
    	public static void main(String[] args) {
    		Scanner sc=new Scanner(System.in);
    		int n=sc.nextInt();
    		int s=solve(n,n);
    		System.out.println(s);
    		
    
    	}
    
    	private static int solve(int n, int m) {
    		if(n<0||m<0) {
    			return 0;//如果n或者m小于零,返回0;
    		}
    		if(n==1||m==1) {
    			return 1;//如果n或者m等于1,无论怎样都只有一种分法
    		}
    		if(n<m) {
    			return solve(n,n);//n小于m,则递归调用solve(n,n);n>=m
    		}
    		if(n==m) {
    			return solve(n,m-1)+1;//n=m,就一种方案,加一再递归solve(n,m-1);
    			
    		}
    		
    		return solve(n,m-1)+solve(n-m,m);//正常情况下,n>m>1;返回solve(n,m-1)表示继续往下递归,solve(n-m,m)表示n-m剩余的数的最大加数也要小于m
    	}
    
    }
  • 相关阅读:
    dota监测
    R0:前瞻
    Python基础
    c++成员函数
    异步IO简介
    使用自定义类型做qmap,qhash的key
    c++ primer 7 函数
    c++ primer 6 语句
    c++ primer 5 表达式
    c++ primer 4 数组和指针
  • 原文地址:https://www.cnblogs.com/hzcya1995/p/13309693.html
Copyright © 2011-2022 走看看