题目描述
题目描述
本题为填空题,只需要算出结果后,在代码中使用输出语句将所填结果输出即可。
把 2019 分解成 3 个各不相同的正整数之和,并且要求每个正整数都不包含数字 2 和 4,一共有多少种不同的分解方法?
注意交换 3 个整数的顺序被视为同一种方法,例如 1000+1001+18和 1001+1000+18被视为同一种。
运行限制
最大运行时间:1s
最大运行内存: 128M
解题过程
两点要求:
- 分解的数中不含2和4
写一个判断函数
bool isTwoOrFore(int x){
int t = 0;
while(x){
t = x % 10;
if(t == 2 || t == 4) return false;
x /= 10;
}
return true;
}
2.保证不出现重复
为了做到这一点,直接在代码中规定i<j<k
如果以 *全体 - 重复 * 的思路去写会很麻烦。而且这是个填空题
全部代码:
#include<iostream>
#include<cmath>
using namespace std;
bool isTwoOrFore(int x){
int t = 0;
while(x){
t = x % 10;
if(t == 2 || t == 4) return false;
x /= 10;
}
return true;
}
int main()
{
ios::sync_with_stdio(false),cin.tie(0),cout.tie(0);
int res = 0;
for(int i=1;i<=674;i++){
for(int j = i+1;j<2019;j++){
for(int k=j + 1;k<2019;k++){
if(i + j +k == 2019){
if(isTwoOrFore(i) && isTwoOrFore(j) && isTwoOrFore(k)){
res ++;
}
}
}
}
}
cout<<res<<endl;
return 0;
}
结果
40785