一、选择题
(1)下面哪个赋值语句是正确的(ABD)
A long test=012
B float f=-412
C int other =(int)true
D double d=0x12345678
E byte b=128
012 (8进制) 等于 10(10进制) A正确
可以将一个int类型的整数赋值给float B正确
Java 的 boolean 类型和 int 不能相互转换, 不存在 1 表示 true, 0 表示 false 这样的用法. C错误
可以将int类型的整数赋值给double D正确
byte能存储的数据范围是-128~127,范围之外的数值赋值给byte类型将报错 E错误
(2)在Java中下面Class的声明哪些是错误的?(ABC)
A public abstract final class Test { abstract void method();}
B public abstract class Test { abstract final void method();}
C public abstract class Test { abstract void method() { } }
D public class Test { final void method() { } }
abstract和final不能同时使用,故AB错误
被abstract修饰的方法是不能实现的,也就是()后面不能有{},故C错误
(3)阅读下列程序,选择哪一个是正确的输出结果(C)
A static A I’m A class static B I’m B class
B I’m A class I’m B class static A static B
C static A static B I’m A class I’m B class
D I’m A class static A I’m B class static B
1、父类静态代码块优先于子类静态代码块执行,且是最早执行
2、父类实例代码块和父类构造方法紧接着执行
3、子类的实例代码块和子类构造方法紧接着再执行
4、第二次实例化子类对象时,父类和子类的静态代码块都将不会再执行
若父类显式定义无参或者默认的构造方法,在子类构造方法第一行默认有隐含的super()调用,即调用基类构造方法
(4)关于抽象类与最终类,下列说法错误的是?(D)
A 抽象类能被继承,最终类只能被实例化。
B 抽象类和最终类都可以被声明使用
C 抽象类中可以没有抽象方法,最终类中可以没有最终方法
D 抽象类和最终类被继承时,方法可以被子类覆盖
最终类不能被继承
二、编程题
2.1 不要二
2.1.1 题目
2.1.2 题解
题目分析:如果(x1,y1)放了蛋糕,则满足 ( (x1-x2) * (x1-x2) + (y1-y2) * (y1-y2) ) == 4的(x2,y2)不能放蛋
糕。
( (x1-x2) * (x1-x2) + (y1-y2) * (y1-y2) ) == 4看起来是一个无解的表达式。
但是可以进行加法表达式分解:
1+3=4
3+1=4
2+2=4
0+4=4
4+0=4
仔细分析前三个表达式是不可能的,因为(x1-x2) * (x1-x2)表达式结果不能等于2或3。
也就是说( (x1-x2) * (x1-x2) 和(y1-y2) * (y1-y2) )两个表达式一个等于0,一个等于4.
可以看出:假设放蛋糕的位置是(x1,y1),则不能放蛋糕的位置(x2,y2),满足x1=x2,y1-y2=2或者x1-
x2=2,y1=y2.
具体步骤:
创建一个和盒子同样大小的数组,初始化二维数组中元素全部尾0,用0表示当前位置可以放蛋糕,1表示当前位置不可以放蛋糕,遍历数组,遇到0则count++,同时将arr[i+1][j] 和 arr [i][j+1]的位置置为1,遍历结束后,count的大小为能放蛋糕的格子数
代码:
public static void main(String[] args) {
Scanner in = new Scanner(System.in);
int W=in.nextInt();
int H=in.nextInt();
int count=0;
int[][] arr=new int[H][W];
for(int i=0;i<H;i++){
for(int j=0;j<W;j++){
if(arr[i][j]==0){
count++;
if(i+2<H){
arr[i+2][j]=1;
}
if(j+2<W){
arr[i][j+2]=1;
}
}
}
}
System.out.println(count);
}