振兴中华
2013-05-23 19:28
302 查看
有两种方法,第一种,按照题意去做,第二种,递归
第二种递归
package com.zcb; /** * * @author zhengchubin * */ public class ZhongHua2 { //每次走到目标地点都需要7步 //用index记录达到目标的次数 static int count = 0; static int a[][] = new int[4][5]; public static void main(String args[]){ for(int row=0;row<4;row++) for(int col=0;col<5;col++){ a[row][col]=row+col; } skipCount(0,0,0); System.out.println(count); } public static void skipCount(int row,int col,int index){ if(a[row][col]==index&&index == 7) count++; if(row+1<4) skipCount(row+1,col,index+1); if(col+1<5) skipCount(row,col+1,index+1); } }
第二种递归
package com.zcb; /** * 标题: 振兴中华 小明参加了学校的趣味运动会,其中的一个项目是:跳格子。 地上画着一些格子,每个格子里写一个字,如下所示:(也可参见p1.jpg) 从我做起振 我做起振兴 做起振兴中 起振兴中华 比赛时,先站在左上角的写着“从”字的格子里,可以横向或纵向跳到相邻的格子里, 但不能跳到对角的格子或其它位置。一直要跳到“华”字结束。 要求跳过的路线刚好构成“从我做起振兴中华”这句话。 请你帮助小明算一算他一共有多少种可能的跳跃路线呢? 答案是一个整数,请通过浏览器直接提交该数字。 注意:不要提交解答过程,或其它辅助说明类的内容。 程序分析: 1、字符串为4行5列的数组,数组从0开始即最大为strs[3][4],x=3,y=4为 生成“从我做起振兴中华”句子的条件, 2、递归结束条件为大一个数的数组即x=4,y=5 3、每次递归向x方向或向y方向移动 */ /** * @author zhengchubin * */ public class ZhongHua { /** * */ static int count = 0; // static String[][] strs = { { "从", "我", "做", "起", "振" }, // { "我", "做", "起", "振", "兴" }, { "做", "起", "振", "兴", "中" }, // { "起", "振", "兴", "中", "华" } }; public static void main(String[] args) { f(0, 0); System.out.println(count); } public static void f(int x, int y) { if (x == 4 || y == 5) { return; } if (x == 3 && y == 4) { count++; } f(x + 1, y); f(x, y + 1); } }