目描述
给定一个正整数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),表示需要分解的正整数
输出
输出一个整数,表示共有多少种符合要求的分解方法
#include<iostream>
using namespace std;
struct quchong{
int a=0;
int b=0;
int c=0;
};
quchong x[100001];
bool ts(int a,int b,int c){
while(a){
if(a%10==3 || a%10==7){
return false;
}
a/=10;
}
while(b){
if(b%10==3 || b%10==7){
return false;
}
b/=10;
}
while(c){
if(c%10==3 || c%10==7){
return false;
}
c/=10;
}
return true;
}
bool qc(int a,int b,int c){
if(a==b || a==c || b==c){
return false;
}
return true;
}
bool qc2(int e,int f,int g,quchong y[],int cn){
for(int i=0;i<=cn;i++){
if((e==y[i].a || e==y[i].b || e==y[i].c) && (f==y[i].a || f==y[i].b || f==y[i].c) && (g==y[i].a || g==y[i].b || g==y[i].c)){
return false;
}
}
return true;
}
int ans(int n){
int cnt=1;
for(int i=1;i<=n;i++){
for(int j=1;j<=n;j++){
for(int k=1;k<=n;k++){
if(i+j+k==n && ts(i,j,k) && qc(i,j,k)&& qc2(i,j,k,x,cnt)){
x[cnt].a=i;
x[cnt].b=j;
x[cnt].c=k;
cnt++;
}
}
}
}
return cnt-1;
}
int main(){
int n;
cin>>n;
cout<< ans(n);
}