母函数 hut1028

描述:输入N,求解有几种和式;

#include"iostream"
using namespace  std;
int c1[130],c2[130];
int main()
{
     int N;
     int i,j,k;
      while(scanf("%d",&N)!=EOF)
      {
          for(i=0;i<=N;++i)
          {
             c1[i]=1;
             c2[i]-0;                
          }
          for(i=2;i<=N;++i)
          {
              for(j=0;j<=N;++j)
                 for(k=0;k+j<=N;k+=i)
                     c2[j+k]+=c1[j];                                        
               for(j=0;j<=N;++j)
               {
                   c1[j]=c2[j];
                   c2[j]=0;    
               }
          }
          printf("%d\n",c1[N]);
      }  
      return 0;
}
或者是:定义一个常数量 _max值不改变

#include"iostream"
using namespace std;
const  int _max=130;
int num1[_max],num2[_max];
int main()
{
   int N,P;
   int i,j,k;
   while(cin>>N)
   {
       for(int i=0;i<=N;++i)
       {
          num1[i]=1;
          num2[i]=0;       
       }
       for(i=2;i<=N;++i)
       {
          for(j=0;j<=N;++j)
          {
              for(k=0;j+k<=N;k+=i)
                num2[j+k]+=num1[j];                
          }                
          for(j=0;j<=N;++j)
          {
             num1[j]=num2[j];
             num2[j]=0;                
          }
       }            
      cout<<num1[N]<<endl;
   }
    return 0;  
}

用memset初始化就会出现错误,太气人了!(可能会超出范围)以下的程序就是错误的:

#include"iostream"
using namespace std;
const  int _max=200;
int num1[_max],num2[_max];
int main()
{
   int N,P;
   int i,j,k;
   while(scanf("%d",N)!=EOF)
   {
       memset(num1,1,sizeof(num1));
       memset(num2,0,sizeof(num2));//越界;
       for(i=2;i<=N;++i)
       {
          for(j=0;j<=N;++j)
          {
              for(k=0;j+k<=N;k+=i)
                num2[j+k]+=num1[j];                
          }                
          for(j=0;j<=N;++j)
          {
             num1[j]=num2[j];
             num2[j]=0;                
          }
       }            
       printf("%d\n",num1[N]);
   }
    return 0;  
}

原文地址:https://www.cnblogs.com/QQbai/p/2127505.html