想了好久
怎么组合?看下面的例子,分解10
3 3 3 1
3 3 2 2
3 3 2 1 1
3 3 1 1 1 1
3 2 2 2 1
3 2 2 1 1 1
3 2 1 1 1 1 1
3 1 1 1 1 1 1 1
2 2 2 2 2
2 2 2 2 1 1
2 2 2 1 1 1 1
……
就是按3 , 2, 1的数量,从多到少,依次分解。
#include "stdio.h"
void main(){
int n;
int i, j;
long sum;
int t;
freopen("in.txt", "r", stdin);
while(scanf("%d", &n)!=EOF){
sum = 0;
if(n>=3){
for(i=n/3; i>=0; i--){
t = n - i*3;
if(t >= 2)
for(j=t/2; j>=0; j--){
sum++; //一路到达最终状态,sum才+1
}
else
sum++; //例如, 3 3 3 1
}
}else if(n==2)
sum = 2;
else
sum = 1;
printf("%d\n", sum);
}
}