文章目录
一、选择题
1、下列与队列结构有关联的是()
A 函数的递归调用
B 数组元素的引用
C 多重循环的执行
D 先到先服务的作业调度
他的回答: D (正确)
正确答案: D
参考答案:
队列的修改是依先进先出的原则进行的。
2、类所实现的接口以及修饰不可以是()。
A void
B public
C abstract
D final
他的回答: D (正确)
正确答案: D
3、下列关于栈叙述正确的是( )。
A 算法就是程序
B 设计算法时只需要考虑数据结构的设计
C 设计算法时只需要考虑结果的可靠性
D 以上三种说法都不对
他的回答: D (正确)
正确答案: D
参考答案:
算法是指解题方案的准确而完整的描述,算法不等于程序,也不等于计算方法,所以 A 错误。设计算法时不仅要考虑对数据对象的运算和操作,还要考虑算法的控制结构。
4、下面关于abstract关键字描述错误的是()
A abstract关键字可以修饰类或方法
B final类的方法都不能是abstract,因为final类不能有子类
C abstract类不能实例化
D abstract类的子类必须实现其超类的所有abstract方法
他的回答: B (错误)
正确答案: D
参考答案:
抽象类的子类是抽象的,可以不重写这个方法。
5、结构化程序的三种基本结构是( )
A 递归、迭代和回溯
B 过程、函数和子程序
C 顺序、选择和循环
D 调用、返回和选择
他的回答: C (正确)
正确答案: C
参考答案:
仅使用顺序、选择、循环三种基本控制结构就足以表达出各种其他形式结构的程序设计方法。故本题答案为 C 选项。
6、对于abstract声明的类,下面说法正确的是
A 可以实例化
B 不可以被继承
C 子类为abstract
D 只能被继承
E 可以被抽象类继承
他的回答: E (正确)
正确答案: E
7、1GB 的准确值是( )。
A 1024×1024 Bytes
B 1024 KB
C 1024 MB
D 1000×1000 KB
他的回答: C (正确)
正确答案: C
参考答案:
1GB=1024MB=1024 × 1024KB=1024 × 1024 × 1024B
8、下面选项中,哪些是interface中合法方法定义?()
A public void main(String [] args);
B private int getSum();
C boolean setFlag(Boolean [] test);
D public float get(int x);
他的回答: A B (错误)
正确答案: A C D
参考答案:重写的规则是子类的权限一定要大于等于父类的权限。
9、下面哪些类实现或继承了 Collection 接口?
A HashMap
B ArrayList
C Vector
D Iterator
他的回答: B C (正确)
正确答案: B C
10、以下为 java 语法保留不能作为类名和方法名使用的是
A default
B int
C implements
D throws
他的回答: A B C D (正确)
正确答案: A B C D
二、编程题
**【计算糖果】**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
【解题思路】:
1、A - B = a 2、B - C = b 3、A + B = c 4、B + C = d 这道题目的实质是:判断三元一次方程组是否有解及求解, 这里是小学生都会的问题了^^ 1+3可以得到A=(a+c)/2;4-2可以得到C=(d-b)/2;2+4可以得到B2=(b+d)/2,3-1可以得到B1=(c-a)/2;如果B1不等B2则表达式无解。
牛客网ACM模式代码
import java.util.*;
public class Main{
public static void main(String[] args){
Scanner sc=new Scanner(System.in);
int a=sc.nextInt();
int b=sc.nextInt();
int c=sc.nextInt();
int d=sc.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.print(A+" "+B1+" "+C);
}else{
System.out.print("No");
}
}
}
【进制转换】给定一个十进制数M,以及需要转换的进制数N。将十进制数M转化为N进制数
输入描述:
输入为一行,M(32位整数)、N(2 ≤ N ≤ 16),以空格隔开
输出描述:
为每个测试实例输出转换后的数,每个输出占一行。如果N大于9,则对应的数字规则参考16进制(比如,10用A表示,等等)
示例1:
输入
7 2
输出
111
【解题思路】:
本题思路很简单,首先想清楚原理:N进制数,每个进制位的值分别是X0N0,X1*N1, X2N^2…,X0,X1,X2就是这些进制位的值,就是就是进行取模余数就是当前低进制的位的值是多少,通过除掉进制数,进入下一个进制位的计算。
import java.util.*;
public class Main{
public static void main(String[] args){
Scanner sc=new Scanner(System.in);
int m=sc.nextInt();
int n=sc.nextInt();
String s="0123456789ABCDEF";
boolean flag=false;
if(m==0){
System.out.print("0");
}
if(m<0){
m=-m;
flag=true;
}
StringBuilder str=new StringBuilder();
while(m!=0){
str.append(s.charAt(m%n));
m=m/n;
}
if(flag){
str.append("-");
}
str.reverse();
System.out.print(str);
}
}