1. 程式人生 > 其它 >第四屆藍橋杯:振興中華

第四屆藍橋杯:振興中華

技術標籤:藍橋杯java

Begin

記錄一下自己的學習過程啦~~

上題目

振興中華

小明參加了學校的趣味運動會,其中的一個專案是:跳格子。
地上畫著一些格子,每個格子裡寫一個字,如下所示:
從我做起振
我做起振興
做起振興中
起振興中華
比賽時,先站在左上角的寫著“從”字的格子裡,可以橫向或縱向跳到相鄰的格子裡,但不能跳到對角的格子或其它位置。一直要跳到“華”字結束。
要求跳過的路線剛好構成“從我做起振興中華”這句話
請你幫助小明算一算他一共有多少種可能的跳躍路線呢?
答案是一個整數,請通過瀏覽器直接提交該數字。
注意:不要提交解答過程,或其它輔助說明類的內容。

思路過程

1.求跳躍路線總數,需大概判斷路線特徵

2.路線特徵:只要不到退、不對角走、從(1,1)走到(4,5)就符合路線要求
3.路線計數特徵:除了從“中”到“華”只有一個選擇,其他字到下一個字都有兩種選擇,分別是向下和向右
4.特殊情況:要到達最上面一排的字,僅只可以從左邊的字往右;要到達最左面一列的字,僅只可以從上邊的字往下;
4.逆推:求總路線數–>求到(4,5)時路線數–>求到(4,4)和(3,5)的路線和–>…–>求到(i,j)的路線–>求(i-1,j)和(i,j-1)的和–>初始路徑數為1

程式碼

借鑑了別人的思路:遞迴(但是一直不是特別明白)

public class Main {
    public
static void main(String[] args) { int[][] a=new int[4][5]; for(int m=0;m<4;m++){ a[m][0]=1; } for(int n=0;n<5;n++){ a[0][n]=1; } for(int i=1;i<4;i++){ for(int j=1;j<5;j++){ a[i][j]=a[i-1][j]+
a[i][j-1]; } } System.out.println(a[3][4]); } }

總結

遇到路線問題,具體計算時需要通過逆推路線確定數值來源,注意分析邊界條件以及初始化