【强训】Day04

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


普通小孩也要热爱生活!

一、选择

  1. 下列与队列结构有关联的是()

A 函数的递归调用
B 数组元素的引用
C 多重循环的执行
D 先到先服务的作业调度

  1. 下面关于abstract关键字描述错误的是()

A abstract关键字可以修饰类或方法
B final类的方法都不能是abstract,因为final类不能有子类
C abstract类不能实例化
D abstract类的子类必须实现其超类的所有abstract方法

  1. 结构化程序的三种基本结构是()

A 递归、迭代和回溯
B 过程、函数和子程序
C 顺序、选择和循环
D 调用、返回和选择

  1. 下面选项中,哪些是interface中合法方法定义?()

A public void main(String [] args);
B private int getSum();
C boolean setFlag(Boolean [] test);
D public float get(int x);

  1. 下面哪些类实现或继承了 Collection 接口?()

A HashMap
B ArrayList
C Vector
D Iterator


二、编程

1. 计算糖果

计算糖果
A,B,C三个人是好朋友,每个人手里都有一些糖果,我们不知道他们每个人手上具体有多少个糖果,但是我们知道以下的信息:
A - B, B - C, A + B, B + C. 这四个数值.每个字母代表每个人所拥有的糖果数.
现在需要通过这四个数值计算出每个人手里有多少个糖果,即A,B,C。这里保证最多只有一组整数A,B,C满足所有题设条件。


2. 进制转换

进制转换
给定一个十进制数M,以及需要转换的进制数N。将十进制数M转化为N进制数


答案

1. 选择

  1. 队列:先进先出 原则。

故:选D

  1. ① abstract 可以修饰类or方法
    ② 抽象类不能实例化
    ③ 抽象方法不能被private修饰,默认是public
    ④ 抽象方法不能被final和static修饰,因为抽象方法要被子类重写
    ⑤ 抽象类必须被继承,并且继承后子类要重写父类中的抽象方法,否则子类也是抽象类,必须要使用 abstract 修饰。(也就是子类也是抽象类就可以不重写父类抽象方法)
    ⑥ 抽象类可以含有抽象方法,不含也ok;但是含有抽象方法的类一定是抽象类。
    ⑦ 抽象类可以实现接口。

参考abstract

故:选D

  1. 结构化程序的三种结构是:顺序、选择和循环。

故:选C

  1. ① 接口中每一个方法都是public的抽象方法, 即接口中的方法会被隐式的指定为 public abstract(只能是 public abstract,其他修饰符都会报错)
    ② 即:接口中的方法要么是显式地public修饰,要么是省略(默认public abstract修饰)
    ③ 接口中的方法都是抽象方法,都没有方法体。

故:选ACD

  1. Map、Collection、Iterator、Comparable、Arrays
    1
    参考集合框架

故:选BC

  1. 程序包含算法,算法就是程序的灵魂,一个需要实现特定功能的程序,实现它的算法可以有很多种,所以算法的优劣决定着程序的好坏。

2. 编程

  1. 计算糖果
    1) 思路:
    ① 根据所给的 A - B, B - C, A + B, B + C 四个表达式来计算A、B、C三个值,也就是三元一次求解。

① A = ((A-B)+(A+B)) / 2;
② B1 = ((B-C) + (B+C)) / 2;
③ C = ((B+C) - (B-C)) / 2;
④ B2 = ((A+B) - (A-B)) / 2;

② 判断是否有解:B1 = B2?

2)代码


import java.util.Scanner;

// 注意类名必须为 Main, 不要有任何 package xxx 信息
public class Main {
    public static void main(String[] args) {
        Scanner in = new Scanner(System.in);
        // 输入: A - B,B - C,A + B,B + C
        int a = in.nextInt();
        int b = in.nextInt();
        int c = in.nextInt();
        int d = in.nextInt();

        // 首先计算A、C
        int A = (a+c)/2;
        int C = (d-b)/2;
        // 在计算B1、B2
        int B1 = (b+d)/2;
        int B2 = (c-a)/2;

        //判断是否有解
        if(B1 == B2) {
            // 有解
            System.out.println(A + " " + B1 + " " + C);
        } else {
            System.out.println("No");
        }

    }
}

  1. 进制转换
    1)思路:

① N进制转为十进制:x1 * N0 + x2 * N1 + …
② 十进制转N进制:[除N倒余法] 数%N=x, 数=数/N,…一直到 数/N==0 停止。(倒余就是结果)

2)为了方便拼接,先使用可变字符串存结果;完成后要进行reverse反转字符串操作(倒余操作)。

3)注意当进制>10时,一定要注意转为字母!!(可以写一个字符串对照着取!!)

  1. 代码
import java.util.Scanner;

public class Main {
     public static void main(String[] args) {
        Scanner in = new Scanner(System.in);
        int m = in.nextInt();
        int n = in.nextInt();
        boolean flg = false;  // 判断是否是负数
        String table = "0123456789ABCDEF"; // 十六进制对照表
        StringBuilder ret = new StringBuilder(); // 最终转换结果

        // 开始进行转换
        if(m < 0) { // 负数
            m = -m;
            flg = true;
        }
         // 这儿,说明此时m>=0!

        if(m == 0) { // 单独判断0
            ret.append('0');
        }
        while(m != 0) {
            // 这里是可能出现字母的,此时就对照着table进行取!!
            ret.append(table.charAt(m%n));
            m = m/n;
        }
        // 判断负数加符号就行
        if(flg == true) {
            ret.append('-');
        }

        // 进行倒余操作
        ret.reverse();
        // 输出就行
        System.out.println(ret.toString());
    }
}

yy

  • 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、付费专栏及课程。

余额充值