蓝桥杯--数的分解(c语言解法)


题目描述

把 2019 分解成 3 个各不相同的正整数之和,并且要求每个正整数都不包含数字 2 和 4,一共有多少种不同的分解方法?
注意交换 3 个整数的顺序被视为同一种方法,例如 1000+1001+18 和 1001+1000+18 被视为同一种。

答案

40785

思路与注意

  1. 枚举这三个不同的数,因为顺序不同但三个数相同会被视为同一种方法且三个数各不相同,所以第二个数要大于第一个数,第三个数要大于前两个数
  2. 因为不包含数字2和4,所以范围可以终止到2000
  3. 自定义了一个judge函数判断数据是否包含数字2或4
  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;
}