第十届蓝桥杯软件类省赛 Java 大学 B 组 题目 第四题

D.数的分解

题目描述:

把 2019 分解成 3 个各不相同的正整数之和,并且要求每个正整数都不包 含数字 2 和 4,一共有多少种不同的分解方法? 注意交换 3 个整数的顺序被视为同一种方法,例如 1000+1001+18 和 1001+1000+18 被视为同一种。
【答案提交】
这是一道结果填空的题,你只需要算出结果后提交即可。本题的结果为一 个整数,在提交答案时只填写这个整数,填写多余的内容将无法得分。

    • (1).第一想到的是三重循环,在每一重里面都进行一个判断(是否包含数字2和4),最后一重判断相加是否等于2019;
    • (2).题目中提到各不相同,排列组合公式共六种(ABC,ACB,BAC,BCA,CAB,CBA),同时交换顺序视为一种,所以最后有也就剩ABC这一种排列方式,令j=i+1,k=j+1,可减少次数;
    • public class Main {
      
          public static boolean fenjie(int a)
          {
              while(a>0)
              {
                  if(a%10==2||a%10==4) {
                      return true;
                  }a/=10;
      
              }
              return false;
          }
      
          public static void main(String[] args) {
              // TODO Auto-generated method stub
      
              int ans=0;
              for(int i=1;i<2019;i++)
              {
                  if(fenjie(i))
                      continue;
                  for(int j=i+1;j<2019;j++)
                  {
                      if(fenjie(j))
                          continue;
                      for(int k=j+1;k<2019;k++)
                      {
                          if(fenjie(k))
                              continue;
                          if(i+j+k==2019) {
                              ans++;
                          }
                      }
                  }
              }
              System.out.println(ans);//40785
          }
      
      }
原文地址:https://www.cnblogs.com/de-ming/p/14053330.html