2013藍橋杯省賽JAVA“振興中華”分析重點及代碼

1.題目 振興中華

小明參加了學校的趣味運動會,其中的一個項目是:跳格子。
  地上畫着一些格子,每個格子裏寫一個字,如下所示:(也可參見p1.jpg)

從我做起振
我做起振興
做起振興中
起振興中華

比賽時,先站在左上角的寫着“從”字的格子裏,可以橫向或縱向跳到相鄰的格子裏,但不能跳到對角的格子或其它位置。一直要跳到“華”字結束。要求跳過的路線剛好構成“從我做起振興中華”這句話。

 2.思路:站在一個點,選擇下一個點。

遞歸,遍歷整個圖,類似於深度搜索。

3.解題:

方法一:【此題的特殊性,”從“的右側和下一行的字一定是“我”的規律】

一個點的可以走的方法等於    該行下一列的的下一步方法+該點同列下一行下一步的方法(遞歸思想)

整個格子看成一個二維數組a[i][j],由於本題只能向右或向下,當邊界時j=4或i=3時,只有一種走法(只能向下、只能向右)

 

package shengsai;

public class zhenxing03 {
	public static void main(String args[])
	{
		//重複
		//變化
		//邊界
		int ans=f(0,0);
		System.out.print(ans);
	}

	public static  int f(int i,int j)
	{
		if(i==3||j==4) return 1;
		 return f(i+1,j)+f(i,j+1);
			
	}
}

方法二:【普遍做法:走完一條路線要驗證是不是”從我做起振興中華“這句話】

package shengsai;

public class zhenxing03 {
	public static char [][] a= {{'從','我','做','起','振'},
		      {'我','做','起','振','興'},
		      {'做','起','振','興','中'},
		      {'起','振','興','中','華'}};
	public static int  count=0;
	public static void main(String args[])
	{
		
		char []b=new char [8];
		jump(0,0,0,b);
		System.out.println(count);
		}
	
	
	public static void jump(int x,int y,int step,char[] b)
	{
		if(x>3)return;
		if(y>4)return;
		if(step>7)return ;
		b[step]=a[x][y];
		if(step==7) {
		if(check(b))
		{
			count++;
		}
		return;}
		jump(x+1,y,step+1,b);
		jump(x,y+1,step+1,b);
	}
		
	
	public static boolean check(char[] b)
	{
		if("從我做起振興中華".equals(String.valueOf(b)))
			
		{
			return true;
		}else
		{
			return false;
		}
	}
	
}

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章