zoukankan      html  css  js  c++  java
  • 母函数 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;  
    }

  • 相关阅读:
    职场中如何沟通 15条技巧现在学
    白领丽人:这六行盛产“钻石王老五”
    个人创业融资中的八大法律问题
    [转帖]用心领导先于理性管理
    职场中牢固人际关系的三十六计
    创业:如何制定最佳融资决策
    工作中如何演绎好你的职场情绪
    怎么成为一个成功的人
    创业不得不看:华商富豪们的成功哲学
    一流简历的10大关注项
  • 原文地址:https://www.cnblogs.com/QQbai/p/2127505.html
Copyright © 2011-2022 走看看