把2019 分解成3 个各不相同的正整数之和,并且要求每个正整数都不包含数字 2 和 4,一共有多少种不同的分解方法?
注意交换3个整数的顺序被视为同一种方法,例如1000+1001+18 和 1001+1000+18 被视为同一种。
思路:首先,三个数都不包含2和4,可设置一个函数过滤
其次,三个数都不大于2019/3,三个数的关系为:i<j<2019-i-j
最后,让次数循环累加
#include<bits/stdc++.h>
using namespace std;
bool yes(int x){
while(x!=0){
if(x%10==2 || x%10==4)return false;
x/=10;
}
return true;
}
int main(){
//首先不能有2和4,设置一个函数来过滤
int sum=0;
//其次至少有一个数小于673,a<b<c
for(int i=1;i<673;i++){
if(yes(i)){//判断i是否有2和4
for(int j=i+1;j<2019-i-j;j++){//j比i大,比第三个数小
if(yes(j) &&yes(2019-i-j))//判断j和第三个数是否是2和4
sum++;//次数循环累加
}
}
}
cout<<sum<<endl;
return 0;
}