天天看点

2015-8-18数据结构-分冶-整数划分问题

#include "stdafx.h"

#include<iostream>

#include<algorithm>

using namespace std;

//把n划分为若干等份,满足:最大加数<=m

int cal_unit_count(int n,int m){

if(m<=0||n<=0){//防止异常输入

return 0;

}

if(m==1||n==1){

return 1;

}

else if(m>n){

return cal_unit_count(n,n);

}

else if(n==m)

{

 return 1+cal_unit_count(n,n-1);

}

else if(n>m&&m>1)

{

 return cal_unit_count(n,m-1)+cal_unit_count(n-m,m);

}

}

//把n划分为m份给m个人有多少种方法

int n_divide_m(int n,int m){

if(m>n||m<=0||n<=0){

return 0;

}

if(m==1)

return 1;

int result=n-1;

for(int i=1;i<m;i++){

  result*=(n-i-1);

}

return result/2;

}

int _tmain(int argc, _TCHAR* argv[])

{

cout<<n_divide_m(10,2)<<endl;

}