原创 整数划分收藏

新一篇: 系统程序员 (笑话) | 旧一篇: 迷宫问题

/*
*整数6如下有11种划分
*6=6
*6=5+1
*6=4+2;6=4+1+1
*6=3+3;6=3+2+1;6=3+1+1+1
*6=2+2+2;6=2+2+1+1;6=2+1+1+1+1
*6=1+1+1+1+1+1
*P(6)=11
*/
#include<iostream.h>
int sum=0;
/*
*sum以n递增一实现划分
*所有的加数都为相同数如2+2+2;1+1+1+1+1+1……
*当如a=6,i=3时sum=i+2+2大于a可是却可继续划分,于是(1)
*/
int fun(int n,int a)
{
 
 sum+=n;
 if(n==0)
 {
  cout<<endl;
  return 0;
 }
 else
 {
  if(sum>a)//(1)是末尾的2划分为1+1
  {
   sum-=n;
   n-=1;
   return fun(n,a);

  }
  else
  {
   cout<<"+"<<n;
   return fun(n,a);
  }
 }

}
int main()
{
 int a=0,n=0,summ=0;
 cin>>a;//输入的数
 for(int i=a;i>0;i--)
 {
  n=a-i;//取出减去i后的得数
  if(n>=i)//当n>=i(即3=3时)n最高只能是i,以免出现6=2+4的重复现象
  {
   n=i;
  }
  cout<<a<<"="<<i;
  if(n==0)
  {
   cout<<endl;
  }
  sum=i;
  while(n>0)//n==0进行下一次取n操作
  {
   summ+=1;
   fun(n,a);//对n进行分解
   if(n!=1)
   {
    cout<<a<<"="<<i;
   }
   sum=i;//为进行下一步处理,使sum清0
   if(sum+n+1<a && i!=1 && n!=1)//为适应出现6=2+2+1+1情况使6=2+2+2中的第3个2划分
   {
    cout<<"+"<<n;
    sum+=n;
    n-=1;
    fun(n,a);
    sum=i;
    cout<<a<<"="<<i;
    summ+=1;
   }
   else
   {
    n-=1;
   }
  
  }
  
 }
 summ+=1;//6=6这一个也要算如
 cout<<"P("<<a<<")="<<summ<<endl;
 return 0;

发表于 @ 2006年08月09日 00:02:00|评论(loading...)|编辑

新一篇: 系统程序员 (笑话) | 旧一篇: 迷宫问题

评论

#jeckbjy 发表于2008-07-21 22:03:26  IP: 124.114.126.*
public int Seprate(int n,int m)
{
if(n==1||m==1) return 1;
else if(n<m)return Seprate(n,n);
else if(n==m) return 1+Seprate(n,n-1);
else return Seprate(n,m-1)+Seprate(n-m,m);
}
#justdoneyue 发表于2008-09-08 18:42:43  IP: 222.90.62.*
能不能用递归解决一下加数打印的问题啊
发表评论  


当前用户设置只有注册用户才能发表评论。如果你没有登录,请点击登录
Csdn Blog version 3.1a
Copyright © andily