2019蓝桥杯省赛题目——“数的分解”

就是elseint main()i

最后的代码

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

这是一道结果填空的题,你只需要算出结果后提交即可

思路很简单——穷举每一个数字

每个正整数都不包含数字 2 和 4就把各个位数的千位百位十位各位提取出来分别判断

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
bool Panduan(int n)
{
	int a = n / 1000;
	int b = (n - a * 1000) / 100;
	int c = (n - a * 1000 - b * 100) / 10;
	int d = n % 10;
	if (a == 2 || a == 4 || b == 2 || b == 4 || c == 2 || c == 4 || d == 2 || d == 4)
	{
		return false;
	}
	else
	{
		return true;
	}
}

关于筛选只是顺序不同的数字可以固定大小比如三个数字x,y,z固定x>y>z这样就不会因为顺序不一样,造成多算出来结果

1
	for (int i = 1; i

最后的代码

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
#include
using namespace std;
int sum_1 = 2019;
bool Panduan(int n)
{
	int a = n / 1000;
	int b = (n - a * 1000) / 100;
	int c = (n - a * 1000 - b * 100) / 10;
	int d = n % 10;
	if (a == 2 || a == 4 || b == 2 || b == 4 || c == 2 || c == 4 || d == 2 || d == 4)
	{
		return false;
	}
	else
	{
		return true;
	}
}
int main()
{
	int sum_max = 0;
	for (int i = 1; i= z)
			{
				continue;
			}
			if (Panduan(i) && Panduan(j) && Panduan(z))
			{
				sum_max++;
			}
			else
			{
				continue;
			}
		}
	}
	cout << sum_max << endl;
    return 0;
}

40785