把 2019 分解成 3 个各不相同的正整数之和,并且要求每个正整数都不包含数字 2 和 4,一共有多少种不同的分解方法?
注意交换 3 个整数的顺序被视为同一种方法,例如 1000+1001+18 和1001+1000+18 被视为同一种。
#include <stdio.h>
#include <stdlib.h>
int AC(int n);
int main(void){
int i,j,k; //循环变量
int n=0; //储存种数
for(i=1; i<=2019; i++){
if(AC(i)) //排除含2,4的数
for(j=1; j<=2019-i; j++){
if(AC(j)) //排除含2,4的数
for(k=1; k<=2019-i-j; k++){ //排除含2,4的数
if(AC(k)&&(i+j+k)==2019&&i>j&&j>k)n++;//排除顺序不同,数字相等的情况
//printf("%d %d %d\n",i,j,k);
}
}
}
printf("%d",n);
}
int AC(int n){ //按位查找2,4
int x;
x=n%10; //不含返回1
if(n==0) return 1;
if(x==2||x==4){
return 0; //含2,4返回0
}
else return AC(n/10);
}
输出:40785