这是一个关于母函数的题目,感谢冬教我母函数,关于母函数介绍的文章:
http://www.wutianqi.com/?p=596
题目地址:http://acm.hdu.edu.cn/showproblem.php?pid=1028
代码:
http://www.wutianqi.com/?p=596
题目地址:http://acm.hdu.edu.cn/showproblem.php?pid=1028
代码:
#include <stdio.h>
#include <string.h>
int c1[130], c2[130];
int main()
{
int i, j, k;
int n;
while(scanf("%d", &n) != EOF)
{
// memset(c1, 1, (n + 1) * sizeof(int));
// memset(c2, 0, (n + 1) * sizeof(int));
//不能用memset这个函数是按字节赋值的,当给整型数组用这种方式清1的话, 不可行
for(i = 0; i <= n; i++)
{
c1[i] = 1;
c2[i] = 0;
// printf("c1[%d]=%d c2[%d] = %d\n", i, c1[i], i, c2[i]);
}
//代表表达式数量 ,例如输入2
//(1 + x + x ^ 2) * (1 + x ^ 2) i代表表达式数量
for(i = 2; i <= n; i++)
{
//这里代表两个表达式相乘,j表示项数第一个表达式的第i个数,k算指数,好相对应的对系数数组赋值
for(j = 0; j <= n; j++)
{
for(k = 0; k + j <= n; k += i)
{
c2[j + k] += c1[j];
}
}
//保存两个表达式相乘后变为一个表达式的系数,让c2清0
for(j = 0; j <=n; j++)
{
c1[j] = c2[j];
c2[j] = 0;
}
}
printf("%d\n", c1[n]);
}
return 0;
}