蓝桥杯:数的分解

题目

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

思路

循环遍历看每个数的每位

代码

#include
using namespace std;
bool check(int num){
	while(num){
		int digit = num%10;
	    if(digit == 2||digit == 4) return false;
	    num /= 10;
	}
	return true;
}
int main()
{
	int n = 2019;
	int cnt = 0;
	for(int i = 1;i < 2019;i++){
		for(int j = i+1;j < 2019;j++){
			int k = n-(i+j);//这里不用循环因为只有一个满足i+j+k == 1019
			if(check(i)&&check(j)&&check(k))
			    if(j < k) cnt++;//有重复的,因此从大到小排除
		}
	}
	cout<<cnt;
	return 0;
}

总结

  • 有时不需要循环,因为只有一个符合条件
  • 建议创建函数,使代码更有可读性
  • 注意排除重复的和注意特殊情况

你可能感兴趣的:(蓝桥杯,蓝桥杯,算法,职场和发展,数据结构,c语言,c++)