华为机试:求最小公倍数、Ja题目2-3级(走格子)

来源:互联网 发布:苹果网络电话软件 编辑:程序博客网 时间:2024/05/21 02:20

1.求最小公倍数

题目描述

正整数A和正整数B 的最小公倍数是指 能被A和B整除的最小的正整数值,设计一个算法,求输入A和B的最小公倍数。

输入描述:

输入两个正整数A和B。

输出描述:

输出A和B的最小公倍数。

示例1

输入

5 7

输出

35

import java.util.Scanner;  public class Main3 {      public static void main(String[] args) {          Scanner scan = new Scanner(System.in);          int a = scan.nextInt();          int b = scan.nextInt();         //之前我一直还不知道,最小公倍数与最大公约数还有这个关系        System.out.println(a*b/getMaxMult(a,b));      }            private static int getMaxMult(int a, int b) {      //循环取余,最后输出b        int m = a % b;          while (m != 0) {          a=b;        b=m;        m=a%b;        }          return b;      }  }

2.Ja题目2-3级(走格子)

题目描述

请编写一个函数(允许增加子函数),计算n x m的棋盘格子(n为横向的格子数,m为竖向的格子数)沿着各自边缘线从左上角走到右下角,总共有多少种走法,要求不能走回头路,即:只能往右和往下走,不能往左和往上走。

输入描述:

输入两个正整数

输出描述:

返回结果

示例1

输入

22

输出

6
package JianZOffer;import java.util.Scanner;//算法1:用递归来实现public class Main1 {      public static void main(String[] args) {          Scanner scan = new Scanner(System.in);          int a = scan.nextInt();          int b = scan.nextInt();         System.out.println(getMaxNum(a,b));      }            private static int getMaxNum(int a, int b) {    if(a==1)    return b+1;    else if(b==1)    return a+1;    else{    return getMaxNum(a-1,b)+getMaxNum(a,b-1);    }    }  }//算法2://组合数学思想:(m+n)的阶乘除以m与n分别的阶乘的积public class Main2{public static void main(String[] args) {Scanner sc=new Scanner(System.in);while(sc.hasNext()){int n=sc.nextInt();int m=sc.nextInt();int top=factorial(m+n);int behind=factorial(m)*factorial(n);System.out.println(top/behind);}}private static int factorial(int n) {int sum=1;for (int j = 0; j <=n; j++) {sum*=j;}return sum;}}//算法3://动态规划思想 dp[][]第一行为1,第一列为1,其余dp[i][j] = dp[i-1][j] + dp[i][j-1]public class Main3{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(getdp(n,m));}}private static int getdp(int n, int m) {int [][]dp=new int[n+1][m+1];dp[0][0]=0;for (int i = 0; i <=n; i++) {dp[i][0]=1;}for (int j = 0; j <=m; j++) {dp[0][j]=1;}for (int i = 1; i <=n; i++) {for (int j = 1; j <=m; j++) {dp[i][j]=dp[i][j-1]+dp[i-1][j];}}return dp[n][m];}}