藍橋杯-振興中華三種解題方法(C語言)
阿新 • • 發佈:2019-01-07
題目:
小明參加了學校的趣味運動會,其中的一個專案是:跳格子。地上畫著一些格子,每個格子裡寫一個字,如下所示:
從我做起振
我做起振興
做起振興中
起振興中華
比賽時,先站在左上角的寫著“從”字的格子裡,可以橫向或縱向跳到相鄰的格子裡,但不能跳到對角的格子或其它位置。一直要跳到“華”字結束。要求跳過的路線剛好構成“從我做起振興中華”這句話。請你幫助小明算一算他一共有多少種可能的跳躍路線呢?
思路:遞迴
做法一 程式碼如下:
#include<stdio.h> int count=0; void road(int row,int col,int arr[][5]) { if(arr[row][col]==7)//從0開始跳到7則為一條完整路線 { count++; } if(col+1<5&&arr[row][col+1]==arr[row][col]+1)//橫向走 { road(row,col+1,arr); } if(row+1<4&&arr[row+1][col]==arr[row][col]+1)//縱向走 { road(row+1,col,arr); } } int main() { int arr[4][5]={ {0,1,2,3,4}, {1,2,3,4,5}, {2,3,4,5,6}, {3,4,5,6,7}}; road(0,0,arr); printf("%d",count); return 0; }
做法二程式碼如下:
#include<stdio.h>
int fun(int row,int col)
{
if(row==0||col==0){
return 1;
}else{
return fun(row-1,col)+fun(row,col-1);
}
}
int main()
{
int count=fun(3,4);
printf("%d",count);
return 0;
}
做法三程式碼如下:
#include<stdio.h> int main() { int arr[4][5]; int i,j; for(i=0;i<4;i++) { arr[i][0]=1; } for(j=0;j<5;j++) { arr[0][j]=1; } for(i=1;i<4;i++) for(j=1;j<5;j++) { arr[i][j]=arr[i][j-1]+arr[i-1][j]; } printf("%d",arr[3][4]); return 0; }