第十届蓝桥杯省赛Java B组 数的分解
Posted 覃会程
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了第十届蓝桥杯省赛Java B组 数的分解相关的知识,希望对你有一定的参考价值。
试题 D: 数的分解
本题总分:10 分
【问题描述】
把 2019 分解成 3 个各不相同的正整数之和,并且要求每个正整数都不包
含数字 2 和 4,一共有多少种不同的分解方法?
注意交换 3 个整数的顺序被视为同一种方法,例如 1000+1001+18 和
1001+1000+18 被视为同一种。
【答案提交】
这是一道结果填空的题,你只需要算出结果后提交即可。本题的结果为一
个整数,在提交答案时只填写这个整数,填写多余的内容将无法得分。
解题思路:
暴力枚举,由于ABC三个数的排序有六种可能,所以结果要除六。
public class test4
public static boolean judge(int num)
while(num>0)
int k=num%10;
if(k==2 || k==4)
return false;
num/=10;
return true;
public static void main(String[] args)
long result=0;
for(int i=1;i<2019;i++)
for(int j=1;j<2019;j++)
for(int k=1;k<2019;k++)
if(i+j+k==2019)
if(i!=j && i!=k && j!=k)
if(judge(i) && judge(j) && judge(k))
result++;
System.out.println(result/6);
上面的代码耗时比较长,下面进行优化,优化后的代码如下:
public class test
public static void main(String[] args)
int a, b, c;
int sum = 0;
for(int i=1; i<2019; i++)
a = i;
int k = 2019 - i;
for(int j=i; j<=k; j++)
b = j;
c = 2019 - a - b; //用前两个数确定的三个数
if(a==b || a==c || b==c) continue;
if(a+b+c != 2019) continue;
if((a+" ").contains("2")||(a+" ").contains("4")) continue;
if((b+" ").contains("2")||(a+" ").contains("4")) continue;
if((c+" ").contains("2")||(a+" ").contains("4")) continue;
sum++; //contains()用于判断是否包含指定字符串
System.out.println(sum/6);
以上是关于第十届蓝桥杯省赛Java B组 数的分解的主要内容,如果未能解决你的问题,请参考以下文章