> 文章列表 > 【java】笔试强训Day4【计算糖果、进制转换】

【java】笔试强训Day4【计算糖果、进制转换】

【java】笔试强训Day4【计算糖果、进制转换】

目录

⛳一、单选题

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

2.类所实现接口的修饰符不能为(        )

3.下列关于栈叙述正确的是(        )

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

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

6.对于abstract声明的类,下面说法正确的是

7.1GB 的准确值是(         )

🌈二、多选题

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

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

10.对于jdk1.8,以下为 java 语法保留不能作为类名和方法名使用的是

🔥三、编程题

1.计算糖果

2.进制转换


⛳一、单选题

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

A 函数的递归调用

B 数组元素的引用

C 多重循环的执行

D 先到先服务的作业调度

🙈大家觉得答案是什么呢


🙉答案是 D 啦~

🔎做题思路:队列———先进先出

函数的递归调用 与 函数的栈 有关 —— 先进后出;先到先服务的作业调度 与 队列 有关

2.类所实现接口的修饰符不能为(        )

A void

B public

C abstract

D final

🙈大家觉得答案是什么呢


🙉答案是 D 啦~

🔎做题思路:接口是为了被重写的,所以不能被 final 修饰

3.下列关于栈叙述正确的是(        )

A 算法就是程序

B 设计算法时只需要考虑数据结构的设计

C 设计算法时只需要考虑结果的可靠性

D 以上三种说法都不对 

🙈大家觉得答案是什么呢


🙉答案是 D 啦~ 

🔎做题思路:栈——先进后出

算法是解决问题的步骤;程序是对问题的具体代码实现;算法和程序都是指令的有限序列,但是程序是算法,而算法不一定是程序

设计算法时不仅要考虑对数据对象的运算和操作,还要考虑算法的控制结构。

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

A abstract关键字可以修饰类或方法

B final类的方法都不能是abstract,因为final类不能有子类

C abstract类不能实例化

D abstract类的子类必须实现其超类的所有abstract方法

🙈大家觉得答案是什么呢


🙉答案是 D 啦~ 

🔎做题思路:对于D,abstract类的子类如果是抽象类,则完全不需要实现

abstract class A {public abstract void func();
}
abstract class B extends A {//抽象类,不需要重写构造方法public abstract void func1();
}
class C extends B {//需要重写构造方法@Overridepublic void func() {}@Overridepublic void func1() {}
}

关于 抽象类 abstract 的使用,可以跳转到我的博客:抽象类 去完全掌握抽象类

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

A 递归、迭代和回溯

B 过程、函数和子程序

C 顺序、选择和循环

D 调用、返回和选择

🙈大家觉得答案是什么呢


🙉答案是 C 啦~ 

🔎做题思路:结构化程序设计是进行模块功能和处理过程设计为主的详细设计原则。结构化程序设计是过程式程序设计的一个子集,他对写入的程序使用逻辑结构,是的理解和修改更有效更容易

6.对于abstract声明的类,下面说法正确的是

A 可以实例化

B 不可以被继承

C 子类为abstract

D 只能被继承

E 可以被抽象类继承

🙈大家觉得答案是什么呢


🙉答案是 E 啦~ 

关于 抽象类 abstract 的使用,可以跳转到我的博客抽象类 去完全掌握抽象类

7.1GB 的准确值是(         )

A 1024×1024 Bytes

B 1024 KB

C 1024 MB

D 1000×1000 KB

🙈大家觉得答案是什么呢


🙉答案是 啦~

🌈二、多选题

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

A public void main(String [] args);

B private int getSum();

C boolean setFlag(Boolean [] test);

D public float get(int x);

🙈大家觉得答案是什么呢


🙉答案是 A、C、D 啦~

🔎做题思路:

public void main(String [] args);  这是一个抽象方法,可以实现接口,并不是一个主函数,主函数要有 static

private int getSum(); 这是一个 private 修饰的,这是一个私有的,而接口不可以是私有的接口里的方法是为了 重写,不可以私有化,重写的规则是:子类一定要大于等于父类的权限 ,因此 B 错误

boolean setFlag(Boolean [] test);  默认是 public abstract,可以实现接口

public float get(int x);  默认是 public ,也是可以实现接口的

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

A HashMap                    B ArrayList                     C Vector                    D Iterator

🙈大家觉得答案是什么呢


🙉答案是 B、C 啦~

🔎做题思路:

Iterator 是一个迭代器,与接口无关

类和接口总览

10.对于jdk1.8,以下为 java 语法保留不能作为类名和方法名使用的是

A default                          B int                            C implements                        D throws

🙈大家觉得答案是什么呢


🙉答案是  A、B、C、D 啦~

🔎做题思路:关键字不能作为类名和方法名使用的

🔥三、编程题

1.计算糖果

链接:计算糖果_牛客题霸_牛客网 (nowcoder.com)

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

输入描述:输入为一行,一共4个整数,分别为A - B,B - C,A + B,B + C,用空格隔开。 范围均在-30到30之间(闭区间)。

输出描述:输出为一行,如果存在满足的整数A,B,C则按顺序输出A,B,C,用空格隔开,行末无空格。 如果不存在这样的整数A,B,C,则输出No

示例1

输入:1 -2 3 4

输出:2 1 3

🔎做题思路:

import java.util.Scanner;public class Main1 {public static void main(String[] args) {Scanner scanner = new Scanner(System.in);int a = scanner.nextInt();int b = scanner.nextInt();int c = scanner.nextInt();int d = scanner.nextInt();int A = (a+c)/2;int B1 = (c-a)/2;int B2 = (b+d)/2;int C = (d-b)/2;if (B1 != B2) {System.out.println("No");} else {System.out.println(A+" "+B1+" "+C);}}
}

2.进制转换

链接:进制转换_牛客题霸_牛客网 (nowcoder.com)

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

输入描述:输入为一行,M(32位整数)、N(2 ≤ N ≤ 16),以空格隔开。

输出描述:为每个测试实例输出转换后的数,每个输出占一行。如果N大于9,则对应的数字规则参考16进制(比如,10用A表示,等等)

示例1

输入:7 2

输出:111

🔎做题思路:突破点为 M 和 N有何种关系

定义一个数组 table,在数组内部放入满足的任意进制数,再定义一个字符串 s,存放M的每一位

1️⃣求得 M 数的每一位数(如果M为负数,先变负数为正数;如果M等于0,直接输出0)

2️⃣把求得的每一位拼接到字符串中

❗❗❗求得的这位数去数组下表中找到对相应的数字拼接到字符串中——假设这个数为15,那么不可以直接把15拼接到字符串中,而是去数组中找到15下标对应的 f 拼接到字符串中

3️⃣逆置字符串(如果是负数,先拼接符号在字符串中,最后逆置字符串)

import java.util.Scanner;
public class Main1 {//进制转换//描述:给定一个十进制数M,以及需要转换的进制数N。将十进制数M转化为N进制数//输入描述:输入为一行,M(32位整数)、N(2 ≤ N ≤ 16),以空格隔开。//输出描述:为每个测试实例输出转换后的数,每个输出占一行。如果N大于9,则对应的数字规则参考16进制(比如,10用A表示,等等)//示例1//输入:7 2//输出:111//思路://定义一个数组 table,在数组内部放入满足的任意进制数,再定义一个字符串 s,存放M的每一位//1️⃣求得 M 数的每一位数(如果M为负数,先变负数为正数)//2️⃣把求得的每一位拼接到字符串中//❗❗❗求得的这位数去数组下表中找到对相应的数字拼接到字符串中//假设这个数为15,那么不可以直接把15拼接到字符串中,而是去数组中找到15下标对应的 F 拼接到字符串中//3️⃣逆置字符串(如果是负数,先拼接符号在字符串中,最后逆置字符串)public static void main(String[] args) {Scanner scanner = new Scanner(System.in);int m = scanner.nextInt();int n = scanner.nextInt();//如果循环里字符串用String类型去拼接,会产生大量的临时变量,因此定义s的时候用StringBuilderStringBuilder s = new StringBuilder();//定义一个字符串,存放m的每一位String table = "0123456789ABCDEF";//定义一个数组 table,在数组内部放入满足的任意进制数//如果m等于0,直接输出0if (m == 0) {System.out.println("0");}boolean flg = false;//假设这个数是负数,先变负数为正数if (m < 0) {m = -m;flg = true;}while (m != 0) {//如果循环里字符串用String类型去拼接,会产生大量的临时变量,因此定义s的时候用StringBuilders.append(table.charAt(m % n)); //查找下标的值,拼接到字符串中m = m / n;}if (flg) {s.append("-");//如果是负数,则最后拼接“-”}s.reverse();//逆置字符串System.out.println(s);}
}