请同学们自行搜索或者想象一个象棋的棋盘,然后把整个棋盘放入第一象限,棋盘的最左下 角是(0,0)位置。那么整个棋盘就是横坐标上9条线、纵坐标上10条线的一个区域。给你三个参数,x,y,k,返回如果“马”从(0,0)位置出发,必须走k步,最后落在(x,y)上的方法数 有多少种?-笔试面试资料

这是qklbishe.com第10252 篇笔试面试资料
提供答案分析,通过本文《请同学们自行搜索或者想象一个象棋的棋盘,然后把整个棋盘放入第一象限,棋盘的最左下 角是(0,0)位置。那么整个棋盘就是横坐标上9条线、纵坐标上10条线的一个区域。给你三个参数,x,y,k,返回如果“马”从(0,0)位置出发,必须走k步,最后落在(x,y)上的方法数 有多少种?-笔试面试资料》可以理解其中的代码原理,这是一篇很好的求职学习资料
本站提供程序员计算机面试经验学习,笔试经验,包括字节跳动/头条,腾讯,阿里,美团,滴滴出行,网易,百度,京东,小米,华为,微软等互联网大厂真题学习背诵。

答案:
请同学们自行搜索或者想象一个象棋的棋盘,然后把整个棋盘放入第一象限,棋盘的最左下 角是(0,0)位置。那么整个棋盘就是横坐标上9条线、纵坐标上10条线的一个区域。给你三个参数,x,y,k,返回如果“马”从(0,0)位置出发,必须走k步,最后落在(x,y)上的方法数 有多少种?

Java

请同学们自行搜索或者想象一个象棋的棋盘,然后把整个棋盘放入第一象限,棋盘的最左下 角是(0,0)位置。那么整个棋盘就是横坐标上9条线、纵坐标上10条线的一个区域。给你三个参数,x,y,k,返回如果“马”从(0,0)位置出发,必须走k步,最后落在(x,y)上的方法数 有多少种? Ba.St.p

递归和动态规划两种解法
递归解法容易理解,动态规划效率更高

import java.util.*;  public class Main{          public static void main(String[] args){         Scanner scanner = new Scanner(System.in);         int x = scanner.nextInt();         int y = scanner.nextInt();         int k = scanner.nextInt();                  System.out.print(waysdp(k, x, y) + "");     }          // 动态规划     public static int waysdp(int k, int x, int y){         int[][][] dp = new int[9][10][k + 1];         // 达成条件         dp[x][y][0] = 1;         for(int rest = 1; rest < k + 1; rest++){             for(int i = 0; i < 9; i++){                 for(int j = 0; j < 10; j++){                     dp[i][j][rest] = (getValue(dp, i - 1, j - 2, rest - 1) +                          getValue(dp, i - 2, j - 1, rest - 1) +                          getValue(dp, i - 1, j + 2, rest - 1) +                          getValue(dp, i - 2, j + 1, rest - 1) +                          getValue(dp, i + 1, j - 2, rest - 1) +                          getValue(dp, i + 2, j - 1, rest - 1) +                          getValue(dp, i + 1, j + 2, rest - 1) +                          getValue(dp, i + 2, j + 1, rest - 1));                 }             }         }         return dp[0][0][k];     }          public static int getValue(int[][][] dp, int a, int b, int rest){         if(a > 8 || a < 0 || b > 9 || b < 0) {             return 0;         }         return dp[a][b][rest];     }          public static int recursion(int a , int b, int rest, int x, int y){         if(a > 8 || a < 0 || b > 9 || b < 0) {             return 0;         }         if(rest == 0){             return  a == x && b == y ? 1 : 0;         }          return recursion(a - 1, b - 2, rest -1, x, y) +              recursion(a - 2, b - 1, rest -1, x, y) +              recursion(a - 1, b + 2, rest -1, x, y) +              recursion(a - 2, b + 1, rest -1, x, y) +              recursion(a + 1, b - 2, rest -1, x, y) +              recursion(a + 2, b - 1, rest -1, x, y) +              recursion(a + 1, b + 2, rest -1, x, y) +              recursion(a + 2, b - 1, rest -1, x, y);     }      }

今天 17:22:23 回复(0)

文章部分来自互联网,侵权联系删除
www.qklbishe.com

区块链毕设网(www.qklbishe.com)全网最靠谱的原创区块链毕设代做网站
部分资料来自网络,侵权联系删除!
资源收费仅为搬运整理打赏费用,用户自愿支付 !
qklbishe.com区块链毕设代做网专注|以太坊fabric-计算机|java|毕业设计|代做平台 » 请同学们自行搜索或者想象一个象棋的棋盘,然后把整个棋盘放入第一象限,棋盘的最左下 角是(0,0)位置。那么整个棋盘就是横坐标上9条线、纵坐标上10条线的一个区域。给你三个参数,x,y,k,返回如果“马”从(0,0)位置出发,必须走k步,最后落在(x,y)上的方法数 有多少种?-笔试面试资料

提供最优质的资源集合

立即查看 了解详情