答案:40785
代码如下:
方法1:求出三重重复的i,j,k,最后总数除以3
public class D_DecompositionofNum{
/********************************************************************************************************************************************************
* Q:如何查看一个整数里面是否含有某个数字?
* 新面孔:(i+"").indexOf("a") (i+""): 将整数i转为字符串i[妙],很适合用于求某个大的整数里面是否含有某一个数字之类的题
* java中字符串可以直接和整型数相加,结果自动转化为字符串(另:单个字符也可以和整数相加,结果转换为整数输出,相关请查看下面的链接
* b.indexOf("a"): 查看字符串b里面是否含有子串a,求子串a的下标,若求得-1则代表b里面不含a
********************************************************************************************************************************************************
*/
public static void main(String[] args) {
int num = 2019; //被分解的数
int count = 0; //记录分解的种类
for (int i = 1; i < num; i++) {
if ((i + "").indexOf("2") != -1 || (i + "").indexOf("4") != -1) //(k + ""),整型数k加一个空字符串的作用应该是把k转换成字符串,好利用字符串自带的indexOf("m")方法来判断字符串里面是否含有字串m
continue; //为啥不是break?上面的if里值不等于-1就代表i里面的某个下标里含有2或4
for (int j = i + 1; j < num; j++) { //j从i+1开始就减少了一半的排列方式
if ((j + "").indexOf("2") != -1 || (j + "").indexOf("4") != -1) //如果整数j里面不含有2或4,举个例子:j=102,if里为真
continue; //就跳出当前j=102这个循环,不再向下计算k了,返回到for里面执行j++(即j=103)后继续往下执行判断if...
int k = num - i - j;
if (i == k || j == k || i == j) //如果三个整数相等(题目要求三个整数不等),不往下执行if判断了,返回当前循环执行j++
continue;
if (k > 0 && (k + "").indexOf("2") == -1 && (k + "").indexOf("4") == -1) { //如果上面的条件都不满足,就代表i,j都不含2或4,且i,j,k不相等,在判断k里不含2或4,即为所求正解
count++;
}
}
}
System.out.println(count / 3); //去重,以上所求为三种情况之和,i<j<k,i<k<j,k<i<j
}
}
java中字符串,整数,字符之间的相加转换
方法2:
待补充…