问题描述:
把2019分解成3个各不相同的正整数之和,并且要求每个正整数都不包含数字2和4,一共有多少种不同的分解方法?
注意交换3个整数的顺序被视为同一种方法,例如1000+1001+18和1001+1000+18被视为同一种。
样例输出:
40785
题解
遍历两个for循环,第三个数为2019-i-j;满足题意求出ans;因为交换顺序被视为同一种方法,ans/6即可;
#include<iostream>
using namespace std;
#include<cmath>
bool check(int i)
{
while (i)
{
if (i % 10 == 2 || i % 10 == 4) return false;
i /= 10;
}
return true;
}
int main()
{
int ans = 0;
for (int i = 1; i < 2019; i++)//注意不能等于2019;不然p可能为负数;
{
if (check(i))
{
int q = 2019 - i;
for (int j = 1; j < q; j++) //同i的范围一样,避免负数出现
{
if (i == j) continue;
if (check(j))
{
int p = 2019 - i - j;
if (i != p && j != p &&check(p))
ans++;
}
}
}
}
cout << ans / 6;
}