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

 

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