题目
把 2019 分解成 3 个各不相同的正整数之和,并且要求每个正整数都不包含数字 2 和 4,
一共有多少种不同的分解方法?
注意交换 3 个整数的顺序被视为同一种方法,例如 1000+1001+18 和 1001+1000+18 被视为同一种。
思路
循环遍历看每个数的每位
代码
#include<iostream>
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;
}
总结
- 有时不需要循环,因为只有一个符合条件
- 建议创建函数,使代码更有可读性
- 注意排除重复的和注意特殊情况