import java.util.Scanner; // 注意类名必须为 Main, 不要有任何 package xxx 信息 public class Main { public static void main(String[] args) { Scanner in = new Scanner(System.in); String a = in.nextLine(); int times = 10; int ret = 0; for (int i = 1; i < a.length(); i++) { String str1 = a.substring(0, i); String str2 = a.substring(i); int lastV1 = str1.charAt(str1.length() - 1); int lastV2 = str2.charAt(str2.length() - 1); if ((lastV1 + lastV2) % 2 == 0) { ret++; } } System.out.println(ret); // 注意 hasNext 和 hasNextLine 的区别 // while (in.hasNextInt()) { // 注意 while 处理多个 case // int a = in.nextInt(); // int b = in.nextInt(); // System.out.println(a + b); // } } }
解题思路
给定一个正整数,需要将其切割成两部分,使得这两部分的和为偶数。
要求统计所有可能的切割方案数。
关键发现:
- 一个数被切割成两部分后,这两部分的和是否为偶数,只与这两个数的个位数有关例如:123456 切割成 12 和 3456实际上只需要判断 2 + 6 的和是否为偶数因为其他位数对最终和的奇偶性没有影响
- 对于任意切割点:左边部分的个位就是切割点左边的数字右边部分的个位就是原始数字的最后一位只需要判断这两个数字之和是否为偶数
举例:输入:12345
- 切割点1:1|2345,判断1+5是否为偶数
- 切割点2:12|345,判断2+5是否为偶数
- 切割点3:123|45,判断3+5是否为偶数
- 切割点4:1234|5,判断4+5是否为偶数
这样的方法避免了处理大数,也不需要考虑前导零的问题,因为前导零不会影响个位数的值。
作者:Silencer76链接:https://www.nowcoder.com/discuss/698577895492423680?sourceSSR=search解题思路