目录

一、编程题

1.另类加法

2.走方格的方案数

二、选择题


一、编程题

1.另类加法

链接:另类加法_牛客题霸_牛客网 (nowcoder.com)

描述

给定两个intAB。编写一个函数返回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.程序无法执行