题意:把一个数因式分解,点到顺序的不算,比如5=1+4和5=4+1就算是一种方式
这个题目是个简单的母函数的……
方法一: 题解:等于在式子的‘+’号后面一次加上一个数字形成新的,而且要求加上的这个数字是当前式子里面最大的,这样就不会重复
如:
分解的那个整数
1 2 3 4 5 6
+1 1
1+1 1+1+1 1+1+1+1
1+1+1+1+1
1+1+1+1+1+1
+2 2
1+2 1+1+2 1+1+1+2
1+1+1+1+2
2+2
1+2+2 1+1+2+2
2+2+2
+3 3
1+3
1+1+3
1+1+1+3
2+3
1+2+3
3+3
+4 4
1+4 1+1+4
2+4
+5 5
1+5
+6 6
因式分解的方式数:1 2 3 5 7 11
比如+1的时候,6就从5里面找,因为5+1=6,+2的时候6就从4里面找,+3的时候就从3里面找,这么算下去,到+6的时候,6本身也算进来,所以就等于从0里面加一个
#include<stdio.h>
int main()
{int i,j,k,l;int a[125]={1};for(i=1;i<121;i++)for(j=i;j<121;j++)a[j]=a[j]+a[j-i];while(~scanf("%d",&k))printf("%dn",a[k]);return 0;
}
方法二:
#include<stdio.h>
#include<string.h>
int main()
{int i,j,k,l,n;int a1[201],a2[201];while(~scanf("%d",&n)){memset(a1,0,sizeof(a1));memset(a2,0,sizeof(a2));a2[0]=1;for(i=1;i<=n;i++){for(j=0;j<=n;j++)for(k=0;j+k*i<=n;k++)a1[j+k*i]+=a2[j]; //方括号内是指数,// a1[]代表将要去乘的系数, for(j=0;j<=n;j++) //a2[]即是代表已乘好的系数, {a2[j]=a1[j]; // 对系数进行赋值…… a1[j]=0; }} printf("%dn",a2[n]);}return 0;
}
本文发布于:2024-01-29 12:49:37,感谢您对本站的认可!
本文链接:https://www.4u4v.net/it/170650378015398.html
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,我们将在24小时内删除。
留言与评论(共有 0 条评论) |