题目
把 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 == 1019if(check(i)&&check(j)&&check(k))if(j < k) cnt++;//有重复的,因此从大到小排除}}cout<<cnt;return 0;
}
总结
- 有时不需要循环,因为只有一个符合条件
- 建议创建函数,使代码更有可读性
- 注意排除重复的和注意特殊情况