这一题可以使用暴力破解,用三个for循环列举出不同的数字,在第一个for循环中,从1开始循环,先判断数字是否有2或4,有则退出本次循环,否则进入第二重循环;在第二重循环中,初始的数字应该比第一重循环大1(因为3个数要不相同),接下来判断是否包含2或4,有则退出本次循环,否则进入第三重循环;在第三重循环中,初始的数字应该比第二重循环大1,接下来判断是否包含2或4,有则退出本次循环,否则就判断三个循环中的数相加是否为2019,是则计数器加1。
代码如下:
#include<iostream>
using namespace std;
bool isnotinclude(int n){ //判断是否有2或4
while(n){
if(n%10==2||n%10==4){ //看最后一位数是否包含2或4
return false;
}
n/=10; //小数点往前移动一位,取整,相当于去掉最后一个数字
}
return true;
}
int main(){
int res=0; //计数器,统计和为2019的方法数
for(int i=1;i<2019;i++){
if(!isnotinclude(i)){
continue; //i有2或4则退出本次循环,进入下一次循环
}
for(int j=i+1;j<2019;j++){ //由于3个数字各不相同,所以j的值应该从比i大1的数开始
if(!isnotinclude(j)){
continue; //j有2或4则退出本次循环,进入下一次循环
}
for(int k=j+1;k<2019;k++){ //由于3个数字各不相同,所以k的值应该从比j大1的数开始
if(!isnotinclude(k)){
continue; //k有2或4则退出本次循环,进入下一次循环
}
if(i+j+k == 2019){ //3个数相加为2019,则计数器加1
res+=1;
}
}
}
}
cout << res <<endl;
return 0;
}