Java實現 第十一屆藍橋杯——走方格(渴望有題目的大佬能給小編提供一下題目,討論群:99979568)

南牆1發表於2020-07-05

 

走方格

問題描述
在平面上有一些二維的點陣。

這些點的編號就像二維陣列的編號一樣,從上到下依次為第 1 至第 n 行,從左到右依次為第1 至第 m 列,每一個點可以用行號和列號來表示。

現在有個人站在第 1 行第 1 列,要走到第 n 行第 m 列。只能向右或者向下走。

注意,如果行號和列號都是偶數,不能走入這一格中。

問有多少種方案。

輸入格式
輸入一行包含兩個整數 n,m。

輸出格式
輸出一個整數,表示答案。

樣例輸入1:

3 4

樣例輸出1

2

樣例輸入2:

6 6

樣例輸出2

 

 

 

 

 

package 第十一屆藍橋杯;

import java.util.Scanner;

public class 走方格 {
    public static void main(String[] args) {
        //輸入矩陣的寬高
        Scanner sc = new Scanner(System.in);
        int n = sc.nextInt();
        int m = sc.nextInt();
        sc.close();
        int[][] dp = new int[n][m];
        dp[0][0]=1;
        //這個規律是隻能往右下走,也就是隻能取左上的值
        for (int i=0;i<n;i++){
            for(int j=0;j<m;j++){
                //第一行一列無需處理
                 if(i==0 && j==0){
                     continue;
                 }
                 //只要不是第一行就可以取上面的
                 if(i>0){
                     dp[i][j]+=dp[i-1][j];
                 }
                 //只要不是第一列就可以取左面的
                 if(j>0){

                     dp[i][j]+=dp[i][j-1];
                 }
                 //如果是偶數行列不能取值,這裡是奇數,因為我的是從0開始,所以偶數的就變成了奇數
                 if((i&1)==1 && (j&1)==1){
                     dp[i][j]=0;
                 }
            }
        }
        System.out.println(dp[n-1][m-1]);
    }
}

 

相關文章