整數劃分(二)+ nyoj176

#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;

}

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章