每日一题09

1. 另类加法

题目描述:

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

示例:
输入:1,2
输出:3
OJ链接
解题思路:

1.异或运算相当于相加(不考虑进位 )比如: 1 ^ 2 = 3 1 + 2 = 3;
2. 与运算左移一位 是两个数相加进位后结果(只考虑进位) 1 & 2 = 0(没有1,不需要进位)
3. 总结:不需要进位,异或的结果就是相加的结果;
4. 需要进位,例如2、 3

sum = 2 ^ 3;
	0010
	0011  ^
	---------- 
	0001 (有1,需要进位)
	
carray = (2 & 3) << 1;
	0010                    
	0011  &
	--------
	0010        0010 << 1 : 0100
	
sum carray再重复上述运算
	0001
	0100  ^
	---------
	0101    =》5  就是结果
	
	0001
	0100  &
	---------
	0000  (不需要进位,结束)

两个数相加:对应二进制位相加的结果 + 进位的结果,当进位之后的结果为0时,相加结束

代码如下:
import java.util.*;

public class UnusualAdd {
    public int addAB(int A, int B) {
        if (A == 0) {
            return B;
        } else 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.走方格的方案数

题目描述:

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

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

本题含有多组样例输入。

示例:
输入:
2 2
1 2
输出:
6
3
OJ链接
解题思路:

1、先从简单情况分析,当n=1,m=1时,就是1个格子;一共有2条路径;在这里插入图片描述
2、当m>0,n=1时,例如m=3;一共有4条路径,就是m+n;
在这里插入图片描述
3、当n>0,m=1时,例如n=3;一共有4条路径,就是m+n;所以当m=1或者n=1时,一共有m+n条路;
在这里插入图片描述
4、当n>0,m>0时,例如n=3,m=3;从右边走,走到第一个格子,这个格子的路有当m=2,n=3时这么多条;
在这里插入图片描述
从下边走,走到第一个格子,这个格子的路有当m=3,n=2时这么多条;依次递推,当m=1或者n=1时,路径就有m+n条;
在这里插入图片描述

代码如下:
import java.util.*;
public class Main {
    public static int med(int n, int m) {
        if (n == 1 || m == 1) {
            return m + n;
        }
        return med(n-1, m) + med(n, m-1);
    }
    public static void main(String[] args) {
        Scanner sc = new Scanner(System.in);
        while (sc.hasNextInt()) {
            int n = sc.nextInt();
            int m = sc.nextInt();
            System.out.println(med(n, m));
        } 
    }
}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值