HOJ1028

阅读更多
这是一个关于母函数的题目,感谢冬教我母函数,关于母函数介绍的文章:
http://www.wutianqi.com/?p=596
题目地址:http://acm.hdu.edu.cn/showproblem.php?pid=1028
代码:
#include 
#include 

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

你可能感兴趣的:(J#,PHP)