普信男之无敌风鹰侠暴龙战士 2022-03-21 21:20 采纳率: 50%
浏览 17
已结题

问一下我这个为什么错了

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;
}

  • 写回答

1条回答 默认 最新

  • 魔法自动机 2022-03-22 00:13
    关注

    题目还有一个条件,整数中不能有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;
    }
    
    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论

报告相同问题?

问题事件

  • 已结题 (查看结题原因) 4月11日
  • 已采纳回答 4月11日
  • 创建了问题 3月21日

悬赏问题

  • ¥50 请教 麒麟系统挂载怎么安装
  • ¥15 如何在ns3中实现路径的自由切换
  • ¥20 SpringBoot+Vue3
  • ¥15 IT从业者的调查问卷
  • ¥65 LineageOs-21.0系统编译问题
  • ¥30 关于#c++#的问题,请各位专家解答!
  • ¥15 App的会员连续扣费
  • ¥15 不同数据类型的特征融合应该怎么做
  • ¥15 用proteus软件设计一个基于8086微处理器的简易温度计
  • ¥15 用联想小新14Pro