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;  
    }

  • 相关阅读:
    多输出感知机及其梯度
    《机器学习实战》-线性回归
    《机器学习实战》-逻辑(Logistic)回归
    SQL Server 空间监测
    SQL Server 从数据库快照还原数据库
    SQL Server 创建数据库快照
    SQL Server 数据库的自动选项
    SQL Server 数据库游标选项
    SQL Server 数据库状态选项
    MYSQL 二进制还原
  • 原文地址:https://www.cnblogs.com/QQbai/p/2127505.html
Copyright © 2011-2022 走看看