整数划分 蓝桥杯

指把一个正整数n写成多个大于等于1且小于等于其本身的整数的和,则其中各加数所构成的集合为n的一个划分。这是一个典型的递归算法。

分析:比如数字5分成3个整数的和,1+1+3,1+2+2,1+1+3,0+2+3,+1+4,

(一)当n=1时,无论m的值为多少(m>0),只有一种划分,即

(二)当m=1的值为多少,只有一种划分,即n个1,

(三)当n=m时否包含n,可以分为以下两种情况:

(1)划分中包含n的情况,只有一个,即

(2)划分中不包含n的情况,这时划分中最大的数字也一定比n小,即n的所有划分。因此
 
代码:

#include<iostream>
using namespace std;

int equation(int n,int m){
   if(m==1||n==1)
    return (1);
   else if(n<m)
    return equation(n,n);
   else if(m==n)
    return 1+equation(n,n-1);
   else
  return equation(n-m,m)+equation(n,m-1);
}

int main(){

   int m,n;
   cin>>n>>m;
   int Q;
   Q=equation(n,m);
   cout<<Q;
 return 0;
}

posted on 2018-04-19 11:33  沙漏,为谁转  阅读(308)  评论(0)    收藏  举报

导航