思路:暴力
很容易想到直接三重循环遍历1到2019然后把其中包含2和4的数去除,判断相加是不是为2019,但是太慢了。可以优化一下。
设第一个数为 i 第二个数为 j 第三个数为 k
i 照样从1到2019进行遍历
j 则可以从 i+1 开始遍历 因为可以避免题目要求的顺序
k 则可以为 2019-i-j 就不需要再遍历到2019节约时间
但同时需要加上一个条件 k>j 因为要保证i<j<k才能不重复
所以代码:
#include<bits/stdc++.h>
using namespace std;
int main()
{int count=0;
for(int i=1;i<=2019;i++){
for(int j=i+1;j<=2019;j++){
int k=2019-i-j;
if(i+j+k==2019
&& i%10!=2
&& i/10%10!=2
&& i/100%10!=2
&& i/1000%10!=2
&& i%10!=4
&& i/10%10!=4
&& i/100%10!=4
&& i/1000%10!=4
&& j%10!=2
&& j/10%10!=2
&& j/100%10!=2
&& j/1000%10!=2
&& j%10!=4
&& j/10%10!=4
&& j/100%10!=4
&& j/1000%10!=4
&& k%10!=2
&& k/10%10!=2
&& k/100%10!=2
&& k/1000%10!=2
&& k%10!=4
&& k/10%10!=4
&& k/100%10!=4
&& k/1000%10!=4
&& j<k)
count++;
}
}
cout<<count;
return 0;
}