图片如下:
试题 D: 数的分解
【问题描述】
把 2019 分解成 3 个各不相同的正整数之和,并且要求每个正整数都不包 含数字 2 和 4,一共有多少种不同的分解方法?
注意交换 3 个整数的顺序被视为同一种方法,例如 1000+1001+18 和 1001+1000+18 被视为同一种。
【答案提交】 这是一道结果填空的题,你只需要算出结果后提交即可。本题的结果为一 个整数,在提交答案时只填写这个整数,填写多余的内容将无法得分。
方法一:
public class LanqiaotenthD { // 定义一个判断函数,判断这个数是否包含2,4 public static boolean judge(int num) { while(num > 0) { int k = num % 10;//举几个例子:400,40,48,480 //每个正整数都不包含数字2和4 if (k == 2 || k == 4) { return false; } //48对10求余后等于8,所以还要进一步的验证 num /= 10; } return true; } public static void main(String[] args) { int result = 0; for (int i = 1; i < 2019; i++) { for (int j = 1; j < 2019; j++) { for (int f = 1; f < 2019; f++) { if (i + j + f == 2019) { //3个不同的正整数之和等于2019 if (i != j && i != f && j != f) { if (judge(i) && judge(j) && judge(f)) { result++; } } } } } } //一种组合3个数字不同变换一种有6种,最后结果/6 System.out.println(result / 6); } }方法二:
public class lanqiao10_4 { public static void main(String args[]) { int count = 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 && j != k && i != k) { if(i + j + k == 2019) { if(String.valueOf(i).indexOf("2") == -1 && String.valueOf(j).indexOf("2") == -1 && String.valueOf(k).indexOf("2") == -1) { if(String.valueOf(i).indexOf("4") == -1 && String.valueOf(j).indexOf("4") == -1 && String.valueOf(k).indexOf("4") == -1) { count++; } } } } } } } System.out.println("结果为:" + count / 6); } }方法三
public class lanqiao10_4 { public static void main(String args[]) { int count = 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 && j != k && i != k) { if(i + j + k == 2019) { if(!String.valueOf(i).contains("2") && !String.valueOf(j).contains("2") && !String.valueOf(k).contains("2")) { if(!String.valueOf(i).contains("4") && !String.valueOf(j).contains("4") && !String.valueOf(k).contains("4")) { count++; } } } } } } } System.out.println("结果为:" + count / 6); } }40785
