【强训】Day1

努力经营当下,直至未来明朗!


普通小孩也要热爱生活!

一、选择

  1. 下列选项中属于面向对象编程主要特征的是()
    A 继承
    B 自顶向下
    C 模块化
    D 逐步求精

  2. 在基本 JAVA 类型中,如果不明确指定,整数型的默认是 __ 类型,浮点数的默认是 __ 类型()
    A int float
    B int double
    C long float
    D long double

  3. 不考虑反射,关于私有访问控制符 private 修饰的成员变量,以下说法正确的是()
    A 可以三种类所引用:该类自身、与它在同一包中的其他类,在其他包中的该类的子类
    B 可以被两种类访问和引用:该类本身、该类的所有子类
    C 只能被该类自身所访问和修改
    D 只能被同一个包中的类访问

  4. 类声明中,声明一个类不能再被继承的关键字是()
    A public
    B abstract
    C final
    D static


二、编程

1. 组队竞赛

组队竞赛
牛牛举办了一次编程比赛,参加比赛的有3*n个选手,每个选手都有一个水平值a_i.现在要将这些选手进行组队,一共组成n个队伍,即每个队伍3人。牛牛发现队伍的水平值等于该队伍队员中第二高水平值。
求分组后各队伍水平值之和的最大值


2. 删除公共字符

删除公共字符
输入两个字符串,从第一字符串中删除第二个字符串中所有的字符。例如,输入”They arestudents.”和”aeiou”,则删除之后的第一个字符串变成”Thy r stdnts。
最终输出第一个字符串删除与第二个字符串公共字符后第一个字符串。


答案

1. 选择

  1. 面向对象编程的基本特征:
    抽象、封装、继承、多态

故:选A

  1. 在Java中年,浮点数的默认类型是double。如果想要float类型,则可以在数字后面加上f 或F。

故:选B

  1. 本题主要是复习“访问修饰限定符
    1

故:选D

  1. ① final关键字可用于修饰类、变量和方法。final修饰的类不能被继承,final修饰的方法不能被重写,final修饰的变量不可被修改,一旦获得初始值,该变量就不能被重新赋值。
    ② public:访问控制修饰符,用于修饰类、类的方法、属性或者构造器。
    ③ abstract:用于修饰抽象类或者抽象方法,可以被继承,但是要重写所有抽象方法
    ④ static:用于修饰类、方法或者成员变量,表明该类是静态类或者方法、成员变量属于当前类。
    一定要注意的是:static修饰类是可以被继承的。

故:选C


2. 编程

  1. 组队竞赛 [贪心算法]
    1)思路

题给每个队伍的水平就是该队伍中第二高的水平值,又要求和的最大值,也就是要让第二高的水平值尽量高。
先给所有的水平值进行升序排列,然后从后向前两两一组,每组中最后一个是该组最大值,另一个就是该组的第二大值,也就是所找的该队伍的水平值;当然,前面n个水平值就是每组的最小水平值,这些水平值分到哪组都无所谓。

2)一定要注意

不是最后的n个数作为最大值,然后在此往前的n个数作为该组水平值,这样极大程度上会使在各组的水平值降低。

3)补充:

① 为了使得单个水平值可以足够大,就使用long类型。
② 数组大小的设置,直接大小就行。

4)代码:

import java.util.Arrays;
import java.util.Scanner;

public class Main {
    public static void main(String[] args) {
        Scanner in = new Scanner(System.in);
        while (in.hasNextInt()) {
            int n = in.nextInt();
            long[] level = new long[3*n];
            for (int i = 0; i < 3*n; i++) {
                level[i] = in.nextLong();
            }
            // 升序排序
            Arrays.sort(level);
            long sum = 0;
            for (int i = 0; i < n; i++) {
                // 注意:这里各队伍的水平值的下标!
                sum += level[level.length - 2*(i+1)];
            }
            System.out.println(sum);
        }
    }
}

  1. 删除公共字符
    1)思路:

① 将第二个字符串的字符都映射到一个hashtable数组中,用来判断第一个字符串中的字符在是否在该字符串中。
② 判断第一个字符串中的某个字符在第二个字符串,不要使用删除,这样效率太低,因为每次删除都伴随数据挪动。这里可以考虑使用字符串的拼接,将第一个字符串中不在第二个字符串中的字符添加到一个新字符串,最后返回新字符串

2)代码:

import java.util.HashMap;
import java.util.Scanner;

public class Main {
    public static void main(String[] args) {
        Scanner in = new Scanner(System.in);
        String str1 = in.nextLine();
        String str2 = in.nextLine();
        
        // 将str2存在HashMap中
        HashMap<Character,Integer> map = new HashMap<>();
        for (int i = 0; i < str2.length(); i++) {
            if(map.get(str2.charAt(i)) == null) {
                map.put(str2.charAt(i),1);
            } else {
                map.put(str2.charAt(i),map.get(str1.charAt(i)+1));
            }
        }
        
        // 对比+拼接
        String ret ="";
        for (int i = 0; i < str1.length(); i++) {
            if(map.get(str1.charAt(i)) == null) {
                // 没有就拼接
                ret += str1.charAt(i);
            }
        }
        System.out.println(ret);
    }
}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

'Dream是普通小孩耶

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值