【问题描述】
把2019分解成3个各不相同的正整数之和,并且要求每个正整数都不包含数字2和4,请问一共有多少种不同的分解方法?
注意:交换3个整数的顺序(如1000 + 1001 +18和1001+1000+18)被视为同一种分解方法。
【答案提交】
这是一道结果填空题,考生只需要算出结果并提交即可。本题的结果为一个整数,在提交答案时只需要填写这个整数,填写多余内容将无法得分。
【参考答案】
40785
【解析】
本题可以枚举3个数字,但是如果3个数字都从1枚举到2019,则程序会变得比较复杂,应主要解决以下两个问题。
(1)三数之和等于2019
(2)解决重复情况
对于(1)要满足i +j+k=2019,其实i和j一旦确定,k 的值就已经确定了,所以利用该式,定义的3个变量可以变成i、j、2019-i-j。
对于(2),要想使3个数字不重复,则只需要将这3个数排序,保证排序后的序列是唯一的,即只要满足i < j < 2019-i-j就可以保证序列不重复。
对于保证数字不包含2和4的问题,可以取出数字的各位,然后判断每位上的数字与2或4是否相等。
【参考程序】
#include <iostream>
using namespace std;
bool judeg(int a)
{
while(a != 0)
{
int t = a % 10;
if(t == 2 || t == 4)
return 0;
a = a / 10;
}
return 1;
}
int main(int argc, char** argv) {
int sum = 0;
for(int i = 1; i < 2019 / 3 + 1; i++)
if(judeg(i))
for(int j = i + 1; j < 2019 - i - j;j++)
if(judeg(j))
if(judeg(2019-i-j))
sum++;
cout << sum << endl;
return 0;
}
运行结果