牛客笔试题——day09(另类加法+求路径总数)

一、另类加法

1. 题目描述

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

2. 测试样例

输入
1,2
输出
3

3. 题目分析

  1. 如果 B 的值为 0,直接返回 A 作为结果,因为任何数加上 0 的结果都是它本身。

  2. 如果 B 的值不为 0,进入 while 循环。

  3. 在循环中,首先用异或运算符 ^ 计算 A 和 B 的异或值,即不带进位的和,将其赋给变量 sum。

  4. 接着用与运算符 & 计算 A 和 B 的与值,并将其左移一位,得到进位的值,将其赋给变量 carry。

  5. 将 sum 赋值给 A,表示更新 A 的值为不带进位的和。

  6. 将 carry 赋值给 B,表示更新 B 的值为进位的值。

  7. 继续循环,直到 B 的值为 0。

  8. 最后返回 A,即为 A 和 B 的和。

4. 代码

public class UnusualAdd {
    public int addAB(int A, int B) {
       if(B==0){
           return A;
       }
       int sum=0;
       int carry=0;
       while (B!=0){
           sum=A^B;
           carry=(A&B)<<1;
           A=sum;
           B=carry;
       }
       return A;
    }
}

二、求路径总数

1. 题目描述

请计算n*m的棋盘格子(n为横向的格子数,m为竖向的格子数)从棋盘左上角出发沿着边缘线从左上角走到右下角,总共有多少种走法,要求不能走回头路,即:只能往右和往下走,不能往左和往上走。

注:沿棋盘格之间的边缘线行走

数据范围: 1≤n,m≤8

2. 输入描述

输入两个正整数n和m,用空格隔开。(1≤n,m≤8)

3. 输出描述

输出一行结果

4. 示例

输入:
2 2
输出:
6

5. 题目分析

  1. m == 1&& n > 0|| n==1&&m>0,返回m+n;
  2. 否则返回med(n-1,m)+med(n,m-1);

6. 代码

import java.util.Scanner;

public class number_Paths {
    public static void main(String[] args) {
        Scanner sc=new Scanner(System.in);
        while(sc.hasNext()){
            int n=sc.nextInt();
            int m=sc.nextInt();
            System.out.println(med(n,m));
        }
    }

    private static int med(int n, int m) {
        if(m==1&&n>0||n==1&&m>0){
            return m+n;
        }
       return med(n-1,m)+med(n,m-1);
    }
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值