题目描述
给定一个正整数N,然后将N分解成3个正整数之和。计算出共有多少种符合要求的分解方法。
1)分解的3个正整数各不相同;
2)分解的3个正整数中都不是数字3和7。
如:N为8,可分解为(1,1,6)、(1,2,5)、(1,3,4)、(2,2,4)、(2,3,3),其中满足要求的分解方法有1种,为(1,2,5)。
输入
输入一个正整数N(5<N<501),表示需要分解的正整数
输出
输出一个整数,表示共有多少种符合要求的分解方法
样例输入
8
样例输出
1
代码:
#include<bits/stdc++.h>
using namespace std;
int N;
int ans;
int a[100];
void dfs(int dep, int rem){
if(dep>3){
if(rem==0){
if(a[1]!=a[2]&&a[1]!=a[3]&&a[2]!=a[3]){
ans++;
}
}
return;
}
else{
for(int i=a[dep-1]; i<=rem; i++){
if(i!=3&&i!=7){
a[dep]=i;
dfs(dep+1, rem-i);
}
}
}
}
int main(){
cin>>N;
a[0]=1;
dfs(1, N);
cout<<ans;
return 0;
}