#include<stdio.h>
int m,n;
int count;
void recur(int num,int c,int qian)
{
int i;
if(num<0)
return;
if(num==0)
{
if(c == n)
count++;
return;
}
for(i=num;i>=1;i--)
{
if(i<=qian || c==0)
recur(num-i,c+1,i);
}
}
int main()
{
int T;
scanf("%d",&T);
while(T--)
{
count =0;
scanf("%d %d",&m,&n);
recur(m,0,0);
printf("%d\n",count);
}
return 0;
題目176
整數劃分(二)
時間限制:1000 ms | 內存限制:65535 KB
難度:3
描述
把一個正整數m分成n個正整數的和,有多少種分法?
例:把5分成3個正正數的和,有兩種分法:
1 1 3
1 2 2
輸入
第一行是一個整數T表示共有T組測試數據(T<=50)
每組測試數據都是兩個正整數m,n,其中(1<=n<=m<=100),分別表示要拆分的正數和拆分的正整數的個數。
輸出
輸出拆分的方法的數目。
樣例輸入
2
5 2
5 3
樣例輸出
2
2
#include <stdio.h>
int fun(int n,int m)
{
if(n < m)
return 0;
if(n == m)
return 1;
if(m == 1)
return 1;
if(n > m)
return fun(n-1,m-1) + fun(n-m,m);
}
int main(void)
{
int ncase,n,m;
scanf("%d",&ncase);
while(ncase--)
{
scanf("%d%d",&n,&m);
printf("%d\n",fun(n,m));
}
return 0;
}
#include<stdio.h>
int m,n;
int count;
void recur(int num,int c,int qian)
{
int i;
if(num<0)
return;
if(num==0)
{
if(c == n)
count++;
return;
}
for(i=num;i>=1;i--)
{
if(i<=qian || c==0)
recur(num-i,c+1,i);
}
}
int main()
{
int T;
scanf("%d",&T);
while(T--)
{
count =0;
scanf("%d %d",&m,&n);
recur(m,0,0);
printf("%d\n",count);
}
return 0;
}