编程语言:Java
2019年全国高校计算机能力挑战赛分设大数据算法赛(所谓的内部试题)
一、选择题(共15题,每题3分,共45分)
1. 在Java中下列说法正确的是( )
A、一个子类可以有多个父类,一个父类也可以有多个子类
B、一个子类可以有多个父类,但一个父类只可以有一个子类
C、 一个子类可以有一个父类,但一个父类可以有多个子类
D、上述说法都不对
2. 关于Java垃圾回收机制描述不正确的是( )
A、垃圾回收机制不须通过程序调用相应方法,也能自动启动。
B、Java程序用System.gc()方法一定能进行垃圾回收;
C、垃圾回收机制属于jvm自动操作,java程序可以不进行垃圾回收操作。
D、垃圾回收机制并不是由操作系统自动执行。
3. 面向对象技术领域内占主导地位的标准建模语言是( )
A、C++ B、Java C、C# D、UML
4. 在Java语言中,以下( )不属于基本数据类型。
A、 int B、boolean C、 String D、 double
5. Java语言类间的继承关系是( )。
A、单继承 B、多重继承 C、不能继承 D、不一定
6. 以下关于构造方法的描述正确的是( )。
A、构造方法的返回类型只能是void型。
B、构造方法是类的一种特殊函数,它的方法名必须与类名相同。
C、构造方法的主要作用是完成对类的对象的初始化工作。
D、一般在创建新对象时,系统会自动调用构造方法。
7. 下列关于java的运行环境说法错误的是 ( )。
A、CLASSPATH为Java加载类(class or lib)路径。
B、Java.exe是用来解释执行Java类文件。
C、 JAVA_HOME的作用是指明JDK的安装路径,例如可以设置成C:Program FilesJavajdk1.6.0_01。
D、 Java 语言编写的程序是与平台无关,所以不须要配置java的运行环境。
8. 下面的选项中,哪些项不属于“汽车类”的属性( )。
A、品牌 B、刹车 C、价格 D、速度
9. 下列两个物品之间的关系不属于继承关系的是( )
A、卡和银行卡 B、汽车和轮胎 C、人和学生 D、动物和狗
10. 下列两个名词之间的关系符合类和对象关系的是( )
A、交通工具和电动小汽车 B、警犬和牧羊犬
C、楼房和房间 D、图书馆和图书
11.关于字符串,下列代码书写不正确的是( )
A、 String str = new String();
B、 String str = “Hello”+“ACCP”;
C、 String str = “123”+“Hello World!”;
D、 StringBuffer strBuf = new StringBuffer(“Hello World!”);
String str = strBuf;
12. 下列选项中关于Java中super关键字的说法错误的是( )。
A、super关键字是在子类对象内部指代其父类对象的引用
B、super关键字不仅可以指代子类的直接父类,还可以指代父类的父类
C、子类可以通过super关键字调用父类的方法
D、子类可以通过super关键字调用父类的属性
13. 下列Java代码写法错误的是( )
class Pet{ }
class Dog extends Pet{}
class Test{
public static void t(Pet p){}
}
A、Pet p = new Pet(); Test.t(p); B、Pet p = new Dog(); Test.t(p);
C、Dog p = new Dog(); Test.t(p); D、Dog p = new Pet(); Test.t(p);
14. 关于下列代码说法正确的是( )。
public class Test{
public void a(){}
public void a(int i){}
public int a(){}
}
A、上述三个a方法是方法重载
B、上述三个a方法是方法重写
C、上面代码编译通不过
D、上述三个方法是第一个和第二个a方法是方法的重写,第三个a方法编译会有问题。
15. 如果一个类的文件名为Student.java,类的代码为:
public class Student {
public static void main(String[] args) {
System.out.println(4<<2);
}}
下列说法正确的是:( )
A、程序运行结果为1; B、程序运行结果为2;
C、程序运行结果为16; D、程序编译错误,不能运行;
二、程序设计题(5道题,共55分)
1.(10分) 统计1到N以内质数的个数,并输出这个数目。
输入说明:一个整数N;
输出说明:质数的数量
输入样例:12
输出样例:5
public class Main { public static void main(String[] args) { Scanner input = new Scanner(System.in); int n = input.nextInt(); System.out.println(getResult1(n)); } private static int getResult1(int n) { int cot = 0; for (int i = 2; i <= n; i++) { if (isPrime(i)) { cot++; } } return cot; } private static boolean isPrime(int n) { boolean flag=true; for (int i = 2; i < n; i++) { if(n%i==0) { flag=false; } } return flag; } private static int getResult(int n) { int cot=0; boolean [] flag=new boolean[n+1]; Arrays.fill(flag, true); for (int i = 2; i <n; i++) { if(flag[i]) { cot++; for (int j = i*2; j < n; j+=i) { flag[j]=false; } } } return cot; } }
2.(10分) 某汽车组装厂主要产品为4轮沙滩越野车(3座)和6轮山地越野车(5座),这两类车辆的轮胎是通用的,车内安装的座位也是通用的。这些部件每月初由供货商送到仓库,其它所需部件都有足够多的库存。组装厂依据月初仓库中的合格部件数量决定每类车辆的组装数量。现有某月初仓库中的两类物品数量,请计算本月两类汽车的产量。
输入说明:两种部件的合格品数量;
输出说明:两类汽车的生产数量;
输入样例:20 16
输出样例:2 2
public class Main2 { /** * 4x+6y=m; * 3x+5y=n; */ public static void main(String[] args) { Scanner input = new Scanner(System.in); int m,n,x,y; m=input.nextInt(); n=input.nextInt(); y=(3*m-4*n)/(3*6-4*5); x=(n-5*y)/3; System.out.println(x+" "+y); input.close(); } }
3.(10分) 内容检索是计算机的强项,现有一段英文文字和一个英文关键词,请找出这个关键词在这段英文文字中的位置,如果该关键词出现不止一次,请输出该关键词第一次出现的位置。
输入说明:一段英文文字(含有空格和标点符号,以’!’作为结束符)和一个英文关键词;
输出说明:关键词第一次出现的位置,首位置记为1;
输入样例:Today is Oct 9. There are seven cats in the house. They are very happy!
are
输出样例:23
public class Main3 { public static void main(String[] args) throws IOException { BufferedReader reader = new BufferedReader(new InputStreamReader(System.in)); String str = reader.readLine(); String obj_str = reader.readLine(); System.out.println(str.indexOf(obj_str)+1); } }
4.(10分) 统计二维整数数组中,横向或纵向连续3个相邻元素的最大和。
输入说明:数组行数x列数 y, 二维整数数组中元素;
输出说明:此数组中横向或纵向连续3个相邻元素的最大和。
输入样例:4 4
3 6 0 8
1 0 2 4
2 0 1 9
0 1 2 3
输出样例:21
3 6 0 8 2
3 6 0 8 4 3
3 6 0 8 5 6 4
3 6 0 8 5 6 7 5
package P; import java.util.Scanner; public class Main4 { public static void main(String[] args) { Scanner in = new Scanner(System.in); int n, m; n = in.nextInt(); m = in.nextInt(); int[][] matrix = new int[n][m]; for (int i = 0; i < n; i++) { for (int j = 0; j < m; j++) { matrix[i][j] = in.nextInt(); } } int Max = Integer.MIN_VALUE; for (int i = 0; i < n; i++) { for (int j = 0; j < m-2; j++) { int sum=0; for (int k = j; k < 3+j; k++) { sum+=matrix[i][k]; } Max=Math.max(Max, sum); } for (int j = 0; j < m-2; j++) { int sum=0; for (int k = j; k < 3+j; k++) { sum+=matrix[k][i]; } Max=Math.max(Max, sum); } } System.out.println(Max); in.close(); } }
5.(15分) 请对给出的一系列英文单词按首字母进行排序,并输出排序后的结果。
输入说明:数字N,表明单词数,接下来是N个英文单词;
输出说明:按字母序的排序结果。
输入样例:6
Apple banana Zebra Tuesday moon CAN
输出样例:Apple
banana
CAN
moon
Tuesday
Zebra
public class Main5 { public static void main(String[] args) throws IOException { Scanner input = new Scanner(System.in); TreeSet<String> treeSet = new TreeSet<>(new Comparator<String>() { @Override public int compare(String o1, String o2) { return o1.compareToIgnoreCase(o2); } }); int n = input.nextInt(); for (int i = 0; i < n; i++) { treeSet.add(input.next()); } treeSet.forEach((v)->{System.out.println(v);}); input.close(); } }