把一个整数划分为比他小的正整数之和共有多少种方法:
代码1:
#include<stdio.h>
int main(void)
{
    int m,n;
    unsigned long long a[505][505];
    int i;
    for(i=0;i<=500;++i)
    {
        a[i][0]=0;
        a[0][i]=1;//初始化。
    }
    for(n=1;n<=500;++n)
    {
        for(m=1;m<=n;++m)
        {      
            if((n-m)<m) a[n-m][m]=a[n-m][n-m];
            a[n][m]=a[n-m][m]+a[n][m-1];//分为用m和不用m。
        }
       
    }
    scanf("%d",&n);
    while(n)
    {
        printf("%llu\n",a[n][n]);
        scanf("%d",&n);
    }
    return 0;
}

代码2:
#include<stdio.h>
int q(int n,int m)
{
 if((n<1)||(m<1)) return 0;
 if((n==1)||(m==1)) return 1;
 if(n<m) return q(n,n);
 if(n==m) return q(n,m-1)+1;
 return q(n,m-1)+q(n-m,m);
}

int main(void)
{
 int n,m;
 int result;
 while(scanf("%d",&n)==1&&n!=0)
 {
  m=n;
  result=q(n,m);
  printf("%d\n",result);
 }
 return 0;
}
其中1比2更优化。

posted on 2009-08-29 22:11  黑夜无痕  阅读(275)  评论(0编辑  收藏  举报