【问题描述】把2019 分解成3个各不相同的正整数之和,并且要求每个正整数都不包含数字2和4,一共有多少种不同的分解方法?注意交换3个整数的顺序被视为同一种方法,例如1000+1001+18和1001+1000+18被视为同一种。
这道题小学时就已经开始接触,只不过当时数很小,口算就可以得出结果。当面临一个很大的数时,我们也可以计算但是所用的时间就很长。就如这个数2019,首先题中给的要求是分成三个不同的数,且每个整数不能包含2或4。我的思路简单粗暴,用for循环直接找出题中要求下的分解方法但是这样会有重复的。
例如:a+b+c=2019,a+c+b=2019, b+a+c=2019,b+c+a=2019,c+b+a=2019,c+a+b=2019
所以最后算得结果要除去重复的就是最终结果
答案:40785
因为计算量较大,结果需要等待几秒。
代码:
public class Text01 {
public static void main(String[] args) {
long sum = 0l;
for(int i=1; i<2019; i++) {
if(twoorfour(i)) {
for(int j=1; j<2019; j++) {
if(twoorfour(j)) {
for(int k=1; k<2019; k++) {
if(twoorfour(k)) {
if(i+j+k==2019 && i!=j && i!=k && j!=k) {
sum++;
break;
}
}
}
}
}
}
}
System.out.println(sum/6);
}
public static boolean twoorfour(int i) {
if(String.valueOf(i).indexOf('2')!=-1 || String.valueOf(i).indexOf('4')!=-1) {
return false;
}else {
return true;
}
}
}