目录
一、编程题
1.另类加法
2.走方格的方案数
二、选择题
一、编程题
1.另类加法
链接:另类加法_牛客题霸_牛客网 (nowcoder.com)
描述
给定两个intA和B。编写一个函数返回A+B的值,但不得使用+或其他算数运算符。
测试样例:
1,2
返回:3
做题思路:位运算符
1.二进制位相异或的结果,是两个数对应相加的结果,不考虑进位
2.二进制与后左移一位的结果,是两个数相加进位后的结果(只考虑进位)
结论:
import java.util.*;public class UnusualAdd {public int addAB(int A, int B) {if (B == 0) {return A;}int sum = 0;int carray = 0;while (B != 0) {sum = A ^ B;carray = (A & B) << 1;A = sum;B = carray;}return A;}}
2.走方格的方案数
链接:走方格的方案数_牛客题霸_牛客网 (nowcoder.com)
描述
请计算n*m的棋盘格子(n为横向的格子数,m为竖向的格子数)从棋盘左上角出发沿着边缘线从左上角走到右下角,总共有多少种走法,要求不能走回头路,即:只能往右和往下走,不能往左和往上走。
注:沿棋盘格之间的边缘线行走
数据范围:1≤n,m≤8
输入描述:
输入两个正整数n和m,用空格隔开。(1≤n,m≤8)
输出描述:
输出一行结果
示例1
输入:
2 2
输出:
6
做题思路:
第一种情况:
第二种情况:
import java.util.*;public class Main {public static void main(String[] args) {Scanner scanner = new Scanner(System.in);while (scanner.hasNext()) {int n = scanner.nextInt();int m = scanner.nextInt();System.out.println(med(n, m));}}public static int med(int n, int m) {//m == 1 或者 n == 1;if ((n == 1 && m >= 1) || (m == 1 && n >= 1)) {return m + n;}//n > 1, m > 1return med(n - 1, m) + med(n, m - 1);}}
二、选择题
1.JAVA语言的下面几种数组复制方法中,哪个效率最高?
A.for循环逐一复制
B.System.arraycopy
C.Arrays.copyOf
D.使用clone方法
2.对文件名为Test.java的java代码描述正确的是()
class Person {String name = "No name";public Person(String nm) {name = nm;}}class Employee extends Person {String empID = "0000";public Employee(String id) {empID = id;}}public class Test {public static void main(String args[]) {Employee e = new Employee("123");System.out.println(e.empID);}}
A.输出:0000
B.输出:123
C.编译报错
D.输出:No name
3.在jdk1.5之后,下列 java 程序输出结果为______。
int i=0;Integer j = new Integer(0);System.out.println(i==j);System.out.println(j.equals(i));
A.true,false
B.true,true
C.false,true
D.false,false
E.对于不同的环境结果不同
F.程序无法执行