得物25年春招-安卓部分编程题

1.实现抽象方法

已知抽象类Base中定义了calculate方法,该方法的计算过程依赖于sum()和avg(),而后两个方法均为抽象方法。要求定义Base的子类Sub类,并实现父类的抽象方法,使得main函数中的运算逻辑得以正确执行。

输入描述:

两个整数

输出描述:

两个整数的和除以两个整数的平均值(平均值为int类型,不考虑小数问题)

输入:

1 2

输出:

3

代码
java 复制代码
import java.util.Scanner;
public class Main {
    public static void main(String[] args) {
        //Sub是需要你定义的子类
        Base base = new Sub();

        Scanner scanner = new Scanner(System.in);
        while (scanner.hasNextInt()) {
            int x = scanner.nextInt();
            int y = scanner.nextInt();
            base.setX(x);
            base.setY(y);
            System.out.println(base.calculate());
        }
    }
}
abstract class Base {
    private int x;
    private int y;

    public int getX() {
        return x;
    }

    public void setX(int x) {
        this.x = x;
    }

    public int getY() {
        return y;
    }

    public void setY(int y) {
        this.y = y;
    }

    public int calculate() {
        if (avg() == 0) {
            return 0;
        } else {
            return sum() / avg();
        }
    }

    /**
     * 返回x和y的和
     */

    public abstract int sum();

    /**
     * 返回x和y的平均值
     */

    public abstract int avg();
}
class Sub extends Base {
    //write your code here......
    public int sum() {
        return getX() + getY();
    }
    public int avg() {
        return (getX() + getY()) / 2;
    }
}

2.创造新世界

众所周知计算机代码底层计算都是0和1的计算,牛牛知道这点之后就想使用0和1创造一个新世界!牛牛现在手里有n个0和m个1,给出牛牛可以创造的x种物品,每种物品都由一个01串表示。牛牛想知道当前手中的0和1可以最多创造出多少种物品。

输入描述:

输入数据包括x+1行:

第一行包括三个整数x(2≤x≤20),n(0≤n≤500),m(0≤m≤500),以空格分隔,

接下来的x行,每行一个01串item[i],表示第i个物品。每个物品的长度length(1≤length≤50)

输出描述:

输出一个整数,表示牛牛最多能创造多少种物品

输入
java 复制代码
3 3 1
1
00
100
输出

2

代码
java 复制代码
import java.util.Scanner;

public class Main {
    public static void main(String[] args) {
        Scanner scanner = new Scanner(System.in);
        int x = scanner.nextInt(); // 物品种类数
        int n = scanner.nextInt(); // 0的数量
        int m = scanner.nextInt(); // 1的数量
        scanner.nextLine(); // 消耗换行符

        // 存储每种物品需要的0和1的数量
        int[][] counts = new int[x][2]; // counts[i][0]是0的数量,counts[i][1]是1的数量

        for (int i = 0; i < x; i++) {
            String item = scanner.nextLine();
            int zeros = 0, ones = 0;
            for (char c : item.toCharArray()) {
                if (c == '0') zeros++;
                else ones++;
            }
            counts[i][0] = zeros;
            counts[i][1] = ones;
        }

        // 动态规划
        // dp[i][j]表示使用i个0和j个1最多能创造的物品种类数
        int[][] dp = new int[n + 1][m + 1];

        for (int k = 0; k < x; k++) {
            int zerosNeeded = counts[k][0];
            int onesNeeded = counts[k][1];

            // 从后往前更新,避免重复选择同一种物品
            for (int i = n; i >= zerosNeeded; i--) {
                for (int j = m; j >= onesNeeded; j--) {
                    dp[i][j] = Math.max(dp[i][j], dp[i - zerosNeeded][j - onesNeeded] + 1);
                }
            }
        }

        System.out.println(dp[n][m]);
    }
}

3.ISBN号码

每一本正式出版的图书都有一个ISBN号码与之对应,ISBN码包括9位数字、1位识别码和3位分隔符,其规定格式如"x-xxx-xxxxx-x",其中符号"-"是分隔符(键盘上的减号),最后一位是识别码,例如0-670-82162-4就是一个标准的ISBN码。

ISBN码的首位数字表示书籍的出版语言,例如0代表英语;

第一个分隔符"-"之后的三位数字代表出版社,例如670代表维京出版社;

第二个分隔之后的五位数字代表该书在出版社的编号;最后一位为识别码。

识别码的计算方法如下:

首位数字乘以1加上次位数字乘以2...以此类推。用所得的结果mod11,所得的余数即为识别码,如果余数为10,则识别码为大写字母X。

例如ISBN号码0-670-82162-4中的识别码4是这样得到的:

对067082162这9个数字,从左至右,分别乘以1,2,...,9,再求和,即

0×1+6×2+...+2×9=158,然后取158 mod 11的结果4作为识别码。

你的任务是编写程序判断输入的ISBN号码中识别码是否正确,如果正确,则仅输出"Right";如果错误,则输出你认为是正确的ISBN号码。

输入描述

只有一行,是一个字符序列,表示一本书的ISBN号码(保证输入符合ISBN号码的格式要求)。

输出描述

共一行,假如输入的ISBN号码的识别码正确,那么输出"Right",否则,按照规定的格式,输出正确的ISBN号码(包括分隔符"-")。

示例1

输入:0-670-82162-4

输出:Right

示例2

输入:0-670-82162-0

输出:0-670-82162-4

代码
java 复制代码
import java.util.Scanner;

public class Main {
    public static void main(String[] args) {
        Scanner scanner = new Scanner(System.in);
        String isbn = scanner.nextLine();
        scanner.close();

        // 移除所有分隔符,提取数字部分
        String cleaned = isbn.replaceAll("-", "");

        // 前9位是计算识别码的基础
        String mainPart = cleaned.substring(0, 9);
        // 输入的识别码
        char inputCheck = cleaned.charAt(9);

        // 计算识别码
        int sum = 0;
        for (int i = 0; i < 9; i++) {
            int digit = mainPart.charAt(i) - '0';
            sum += digit * (i + 1);
        }

        // 计算正确的识别码
        int mod = sum % 11;
        char correctCheck;
        if (mod == 10) {
            correctCheck = 'X';
        } else {
            correctCheck = (char) ('0' + mod);
        }

        // 检查是否正确
        if (inputCheck == correctCheck) {
            System.out.println("Right");
        } else {
            // 构建正确的ISBN号码(保持原格式)
            StringBuilder correctIsbn = new StringBuilder(isbn);
            correctIsbn.setCharAt(isbn.length() - 1, correctCheck);
            System.out.println(correctIsbn.toString());
        }
    }
}
相关推荐
渣哥6 小时前
HashMap 底层原理解析:容量设计为何总是 2 的 n 次方
java
渣哥6 小时前
HashMap 与 ConcurrentHashMap 有什么区别?通俗易懂版
java
励志不掉头发的内向程序员6 小时前
从零开始的python学习——函数(1)
开发语言·python·学习
用户2018792831676 小时前
StickerHeaderRecyclerView的一种简易实现
android
ChillJavaGuy6 小时前
Java中的四大引用类型强引用、软引用、弱引用、虚引用
java·开发语言·jvm·四大引用类型
华仔啊6 小时前
Java泛型符号T、E、K、V、?总混用?5分钟彻底讲透,别再搞错了!
java
扑克中的黑桃A6 小时前
飞算JavaAI智慧农业场景实践:从生产监测到产销协同的全链路系统搭建
java
dylan_QAQ6 小时前
Java转Go全过程02-面向对象编程部分
java·后端·go
心月狐的流火号6 小时前
详解Java内存模型(JMM)
java·后端