蓝桥杯--数的分解(c语言解法)
题目描述
把 2019 分解成 3 个各不相同的正整数之和,并且要求每个正整数都不包含数字 2 和 4,一共有多少种不同的分解方法?
注意交换 3 个整数的顺序被视为同一种方法,例如 1000+1001+18 和 1001+1000+18 被视为同一种。
答案
40785
思路与注意
- 枚举这三个不同的数,因为顺序不同但三个数相同会被视为同一种方法且三个数各不相同,所以第二个数要大于第一个数,第三个数要大于前两个数
- 因为不包含数字2和4,所以范围可以终止到2000
- 自定义了一个judge函数判断数据是否包含数字2或4
- 要注意审题!!(各不相同)
代码(c)
#include
int judge(int a){
while(a>0){
if((a%10)==2 || (a%10)==4){
return 0;
}a/=10;
}
return 1;
}
int main(){
int num=0;
int i,j,k;
for(i=1;i<2000;i++){
if(judge(i)){
for(j=i+1;j<2000;j++){
if(judge(j)){
k=2019-i-j;
if(judge(k) && k>j){num+=1;}
}
}
}else continue;
}
printf("%d",num);
return 0;
}