问一下我这个为什么错了

img


元气算法上面答案是40785

#include<stdio.h>
int main(){
int ans = 0;
int i,m,n;
for(i = 1;i<=2019;i++){
for(m=i-1;m>0;m--){
for(n=m-1;n>0;n--){
if(i+m+n==2019){
ans+=1;
}
}
}
}
printf("%d",ans);
return 0;
}

题目还有一个条件,整数中不能有2和4,你没有考虑。

//isRight用来判断一个整数是否有2和4
bool isRight(int x) {
    while (x) {
        int cnt = x % 10;
        if (cnt==2 || cnt==4)
            return false;
        x /= 10;
    }
    return true;
}
int main() {
    int ans = 0;
    int i, m, n;
    for (i = 673; i <= 2019; i++) {//673*3=2019
        if (!isRight(i)||i*3<2019)//m和n都小于i,如果i*3都小于2019,就没必要再算m和n了
            continue;
        for (m = i - 1; m > 0; m--) {
            if (!isRight(m)||i+m*2<2019)
                continue;
            for (n = m - 1; n > 0; n--) {
                if (!isRight(n))
                    continue;
                if (i + m + n < 2019)
                    break;
                if (i + m + n == 2019)
                    ans += 1;
            }
        }
    }
    printf("%d", ans);
    return 0;
}