【day9】每日编程:求路径总数&另类加法

本文介绍了如何利用位运算(按位与、异或和左移)解决牛客网上的加法问题,以及如何结合递归来处理走方格的计数问题。通过实例和逻辑分析,展示了这些技术在实际编程中的巧妙应用。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

另类加法__牛客网

这道题要求不能用数运算符,既然不能用加减乘除,然后又要对数字进行操作,那考虑的方向只能是什么位运算符啊什么位移运算符啊什么的 

针对这道题给出解决办法:两个数相加,如果两个数  按位与  后   向左移  移动一位   的值,如果等于0,那么!!!  这两个数  按位异或  的结果就是这两个数的和!!!!

就针对上述的思想来举个例子

这个例子就符合了上述的解决办法

但是!!! 万一两个数的按位与后左移1,结果不为0呢?  那就想办法让它变成0 

 思路:假如两个数左移后不等于0,这时搞一个sum=A^B;搞一个tmp = (A^B)<<1; 因为tmp不等于0,那么让A=sum,B=tmp,然后继续循环,此时A是一个新数,B也是一个新数,继续看AB的tmp是不是等于0,如果tmp等于0了,那么此时的sum就是原来AB的和

import java.util.*;

public class UnusualAdd {
    public int addAB(int A, int B) {
        // write code here
        if(B == 0){
            return A;
        }else if(A == 0){
            return B;
        }
        int sum = 0;
        int tmp = 0;
        while(B != 0){
            sum = A ^ B;
            tmp = (A & B) << 1;
            A = sum;
            B = tmp;
        }
        return sum;
    }
}

走方格的方案数_牛客题霸_牛客网

 这道题画个图来理解题目想表达的意思

 这几幅图就能明白题目想表达的意思和当m=1或者n=1时候的结果

那么n,m>1呢?

根据图解,这道题就得用递归来写,递归的结束条件就是要么m=1时返回m+n,要么n=1时返回m+n 

import java.util.Scanner;

// 注意类名必须为 Main, 不要有任何 package xxx 信息
public class Main {
    public static void main(String[] args) {
        Scanner in = new Scanner(System.in);
        int n = in.nextInt();
        int m = in.nextInt();
        System.out.println(func(n,m));
    }

    public static int func(int n, int m){
        if(n == 1 || m == 1){
            return m+n;
        }
        return func(n-1,m) + func(n,m-1);
    }
}

递归的过程就是横竖遇到一个岔路口就要减一的往下走,一直到走到递归的结束条件,就不停的返回总数

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值