day9—编程题

文章目录

  • 1.第一题
    • 1.1题目
    • 1.2涉及的相关知识
    • 1.3思路
    • 1.4解题
  • 2.第二题
    • 2.1题目
    • 2.2涉及到的知识点
    • 2.3思路
    • 2.4解题

1.第一题

1.1题目

描述:
给定两个int A和B。编写一个函数返回A+B的值,但不得使用+或其他算数运算符。

1.2涉及的相关知识

按位与:&
1&0 = 0;1&1 = 1;0&0 = 0

按位异或:^
1^1 = 0; 1^0 = 1;0^0 = 0

1.3思路

  1. 二进制位异或运算相当于对应位相加,不考虑进位
  2. 二进制位与运算左移一位相当于对应位相加之后的进位

1.4解题

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.第二题

2.1题目

描述:
请计算n*m的棋盘格子(n为横向的格子数,m为竖向的格子数)从棋盘左上角出发沿着边缘线从左上角走到右下角,总共有多少种走法,要求不能走回头路,即:只能往右和往下走,不能往左和往上走。
注:沿棋盘格之间的边缘线行走
输入描述:
输入两个正整数n和m,用空格隔开。(1≤n,m≤8)
输出描述:
输出一行结果

2.2涉及到的知识点

hasNext()只能获取到空格之前和空格之后的字符串,并返回true

2.3思路

  1. 本题采用递归的思想来解题
  2. 当行数和列数有任意一个为1时递归结束
  3. n行m列的路径总数 = n - 1行m列的路径总数 + n行m - 1列的路径总数

2.4解题

import java.util.*;
public class Main {
    //求路径的总条数
    public static int med(int n,int m){
        if(n == 1 && m >= 1 || m == 1 && n >= 1){
            return n + m;
        }
        return med(n - 1,m) + med(n,m - 1);
    }
    public static void main(String[] args) {
        Scanner sc = new Scanner(System.in);
        int n = sc.nextInt();
        int m = sc.nextInt();
        int sum = ret(n,m);
        System.out.println(sum);
        }
    }
}

你可能感兴趣的:(每日一题,java,开发语言)