第六届蓝桥杯JavaB组——第6题加法变乘法
解题思路:
将两个不相邻的乘号所有的可能情况依次穷举出来并判断即可
注意点:一定不要漏了任何一种情况,虽然这里的边界点都不是答案,但我们做题时的思考方式和维度一定要时刻把握准确。
答案:16
Java代码:
1 package com.lzp.lanqiaosix.p6; 2 3 /** 4 * @Author LZP 5 * @Date 2021/3/7 15:23 6 * @Version 1.0 7 * <p> 8 * 加法变乘法 9 * <p> 10 * 我们都知道:1+2+3+ ... + 49 = 1225 11 * 现在要求你把其中两个不相邻的加号变成乘号,使得结果为2015 12 * <p> 13 * 比如: 14 * 1+2+3+...+10*11+12+...+27*28+29+...+49 = 2015 15 * 就是符合要求的答案。 16 * <p> 17 * 请你寻找另外一个可能的答案,并把位置靠前的那个乘号左边的数字提交(对于示例,就是提交10)。 18 * <p> 19 * 注意:需要你提交的是一个整数,不要填写任何多余的内容。 20 * 21 * 22 * 解题思路: 23 * 将两个不相邻的乘号所有的可能情况依次穷举出来并判断即可 24 * 25 * 注意点:一定不要漏了任何一种情况,虽然这里的边界点都不是答案,但我们做题时的思考方式和维度一定要时刻把握准确。 26 * 27 * 答案:16 28 */ 29 public class Main { 30 public static void main(String[] args) { 31 for (int posLeft = 1; posLeft <= 46; posLeft++) { 32 for (int posRight = posLeft + 2; posRight <= 48; posRight++) { 33 // 两个乘号都在边界点 34 if (posLeft == 1 && posRight == 48) { 35 int total = 0; 36 for (int i = 3; i <= 47; i++) { 37 total += i; 38 } 39 total += (2 + 48 * 49); 40 if (total == 2015) { 41 System.out.println(posLeft + ":" + posRight); 42 } 43 // 左边的乘号在边界点,而右边的乘号不在 44 } else if (posLeft == 1) { 45 // 中 46 int totalMiddle = 0; 47 for (int i = 3; i < posRight; i++) { 48 totalMiddle += i; 49 } 50 51 // 右 52 int totalRight = 0; 53 for (int i = posRight + 2; i <= 49; i++) { 54 totalRight += i; 55 } 56 57 if (2 + totalMiddle + totalRight + (posRight * (posRight + 1)) == 2015) { 58 System.out.println(posLeft + ":" + posRight); 59 } 60 // 右边的乘号在边界点,而左边的乘号不在 61 } else if (posRight == 48) { 62 // 左 63 int totalLeft = 0; 64 for (int i = 1; i < posLeft; i++) { 65 totalLeft += i; 66 } 67 68 // 中 69 int totalMiddle = 0; 70 for (int i = posLeft + 2; i <= 47; i++) { 71 totalMiddle += i; 72 } 73 74 if (totalLeft + totalMiddle + (48 * 49) + (posLeft * (posLeft + 1)) == 2015) { 75 System.out.println(posLeft + ":" + posRight); 76 } 77 78 } else { 79 // 左 80 int totalLeft = 0; 81 for (int i = 1; i < posLeft; i++) { 82 totalLeft += i; 83 } 84 85 // 中 86 int totalMiddle = 0; 87 for (int i = posLeft + 2; i < posRight; i++) { 88 totalMiddle += i; 89 } 90 91 // 右 92 int totalRight = 0; 93 for (int i = posRight + 2; i <= 49; i++) { 94 totalRight += i; 95 } 96 97 int left = posLeft * (posLeft + 1); 98 int right = posRight * (posRight + 1); 99 100 if (totalLeft + totalMiddle + totalRight + left + right == 2015) { 101 System.out.println(posLeft + ":" + posRight); 102 } 103 } 104 } 105 } 106 } 107 }