题解 | 游游的整数切割

游游的整数切割

https://www.nowcoder.com/practice/c01b07fe9623425a806c85cdb6f0e0f7

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);
        // }
    }
}

解题思路

给定一个正整数,需要将其切割成两部分,使得这两部分的和为偶数。

要求统计所有可能的切割方案数。

关键发现:

  1. 一个数被切割成两部分后,这两部分的和是否为偶数,只与这两个数的个位数有关例如:123456 切割成 12 和 3456实际上只需要判断 2 + 6 的和是否为偶数因为其他位数对最终和的奇偶性没有影响
  2. 对于任意切割点:左边部分的个位就是切割点左边的数字右边部分的个位就是原始数字的最后一位只需要判断这两个数字之和是否为偶数

举例:输入: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解题思路

全部评论
00110000 060 48 30 0 00110001 061 49 31 1 00110010 062 50 32 2 00110011 063 51 33 3 00110100 064 52 34 4 00110101 065 53 35 5 00110110 066 54 36 6 00110111 067 55 37 7 00111000 070 56 38 8 00111001 071 57 39 9 真是巧合啊。。。
点赞 回复 分享
发布于 06-23 19:37 北京

相关推荐

点赞 评论 收藏
分享
11-03 13:18
门头沟学院 Java
包行:平时怎么刷算法题的哇,字节的手撕听说都很难
字节跳动工作体验
点赞 评论 收藏
分享
评论
点赞
1
分享

创作者周榜

更多
牛客网
牛客网在线编程
牛客网题解
牛客企业服务