数的分解
试题 D: 数的分解
本题总分:10 分
【问题描述】
把 2019 分解成 3 个各不相同的正整数之和,并且要求每个正整数都不包
含数字 2 和 4,一共有多少种不同的分解方法?
注意交换 3 个整数的顺序被视为同一种方法,例如 1000+1001+18 和
1001+1000+18 被视为同一种。
【答案提交】
这是一道结果填空的题,你只需要算出结果后提交即可。本题的结果为一
个整数,在提交答案时只填写这个整数,填写多余的内容将无法得分。
【题解】
直接枚举,三重for循环嵌套,注意三个要求。
一是不能包含2、4。这个简单,加个函数进行检查就行。
二是互不相同,且不能重复。这里让第二个数的枚举范围在第一个数之后,第三
个数枚举范围在第二个数之后。相当于枚举最小的数,中间的数,和最大的数。
【答案】
40785
【代码】
#include <cstdio>
#include <cstring>
#include <iostream>
using namespace std;
///满足条件一
bool check( int x )
{
while(x){
if( x%10 == 2 || x%10 == 4)
return false;
x /= 10;
}
return true;
}
int main()
{
int ans = 0;
for( int i = 1; i < 2019; i++ ){
if( !check(i) )
continue;
for( int j = i+1; j < 2019; j++){
int k = 2019 - i - j;
if(k > j && check(j) && check(k))///此处记得j,k都要check
ans++;
}
}
printf( "%d\n", ans );
return 0;
}