1 条题解

  • 0
    @ 2025-4-7 21:19:29

    C :

    int digui(int m,int n)
    {
      if(m==0||n==1)
        return 1;
       if(n>m)
    	   return digui(m,m);
       else
         return digui(m,n-1)+digui(m-n,n);
    }
    int main(int argc, char* argv[])
    {
    	int n,a,b;
    	scanf("%d",&n);
    	while(n--)
    	{
    	  scanf("%d%d",&a,&b);
    	   printf("%d\n",digui(a,b));
    	}
    	return 0;
    }
    

    C++ :

    /*    解题分析:
             设f(m,n) 为m个苹果,n个盘子的放法数目,则先对n作讨论,
             当n>m:必定有n-m个盘子永远空着,去掉它们对摆放苹果方法数目不产生影响。即if(n>m) f(m,n) = f(m,m)  
             当n<=m:不同的放法可以分成两类:
             1、有至少一个盘子空着,即相当于f(m,n) = f(m,n-1);  
             2、所有盘子都有苹果,相当于可以从每个盘子中拿掉一个苹果,不影响不同放法的数目,即f(m,n) = f(m-n,n).
             而总的放苹果的放法数目等于两者的和,即 f(m,n) =f(m,n-1)+f(m-n,n) 
         递归出口条件说明:
             当n=1时,所有苹果都必须放在一个盘子里,所以返回1;
             当没有苹果可放时,定义为1种放法;
             递归的两条路,第一条n会逐渐减少,终会到达出口n==1; 
             第二条m会逐渐减少,因为n>m时,我们会return f(m,m) 所以终会到达出口m==0.
     */
     #include<stdio.h>
     
     int fun(int m,int n)  //m个苹果放在n个盘子中共有几种方法
     {
         if(m==0||n==1)  //因为我们总是让m>=n来求解的,所以m-n>=0,所以让m=0时候结束,如果改为m=1,
             return 1;    //则可能出现m-n=0的情况从而不能得到正确解    
         if(n>m)
             return fun(m,m);
         else
             return fun(m,n-1)+fun(m-n,n);
     }
     
     int main()
     {
         int T,m,n;
         scanf("%d",&T);
         while(T--)
         {
             scanf("%d%d",&m,&n);
             printf("%d\n",fun(m,n));
         }
     }
    

    Java :

    import java.util.Scanner;
    
    
    public class Main {
    	public static int fun(int m,int n)  
    	{
    	     if(m==0||n==1) 
    	         return 1;    
    	     if(n>m)
    	         return fun(m,m);
    	     else
    	         return fun(m,n-1)+fun(m-n,n);
    	}
    	public static void main(String[] args){
    		Scanner sc=new Scanner(System.in);
    		int a,b;
    		sc.nextInt();
    		while(sc.hasNext()){	
    			a=sc.nextInt();
    			b=sc.nextInt();
    			System.out.println(fun(a,b));
    		}
    	}
    }
    
    
    • 1

    信息

    ID
    1171
    时间
    1000ms
    内存
    32MiB
    难度
    (无)
    标签
    递交数
    0
    已通过
    0
    上传者