1. 程式人生 > >藍橋杯-振興中華三種解題方法(C語言)

藍橋杯-振興中華三種解題方法(C語言)

題目:
小明參加了學校的趣味運動會,其中的一個專案是:跳格子。地上畫著一些格子,每個格子裡寫一個字,如下所示:
從我做起振
我做起振興
做起振興中
起振興中華
在這裡插入圖片描述
比賽時,先站在左上角的寫著“從”字的格子裡,可以橫向或縱向跳到相鄰的格子裡,但不能跳到對角的格子或其它位置。一直要跳到“華”字結束。要求跳過的路線剛好構成“從我做起振興中華”這句話。請你幫助小明算一算他一共有多少種可能的跳躍路線呢?
思路:遞迴
做法一 程式碼如下:

#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;
}