小明参加了学校的趣味运动会,其中的一个项目是:跳格子。
地上画着一些格子,每个格子里写一个字,如下所示:
从我做起振
我做起振兴
做起振兴中
起振兴中华
比赛时,先站在左上角的写着“从”字的格子里,可以横向或纵向跳到相邻的格子里,但不能跳到对角的格子或其它位置。一直要跳到“华”字结束。
要求跳过的路线刚好构成“从我做起振兴中华”这句话。
请你帮助小明算一算他一共有多少种可能的跳跃路线呢?
public class ZhenXingZhongHua {
public static void main(String[] args) {
int[][] a = new int[4][5];
int i;
int j;
for (i = 0; i < 4; i++)
for (j = 0; j < 5; j++) {
if (i == 0 || j == 0)
a[i][j] = 1;
}
a[0][0] = 0;
for (i = 1; i < 4; i++) {
for (j = 1; j < 5; j++)
a[i][j] = a[i - 1][j] + a[i][j - 1];
}
System.out.println(a[3][4]);
}
}
另附路人C语言 版:
#include <stdio.h>
int count = 0;
void find(int i, int j, int map[4][5]);
void main() {
int map[4][5] = {1,2,3,4,5,2,3,4,5,6,3,4,5,6,7,4,5,6,7,8};
find(0, 0, map);
printf("%d\n", count);
}
void find(int i, int j, int map[4][5]) {
if(map[i][j] == 8) {
count++;
return;
}
if(i < 4 && j + 1 < 5) {
if(map[i][j] + 1 == map[i][j + 1]) {
find(i, j + 1, map);
}
}
if(i + 1 < 4 && j < 5) {
if(map[i][j] + 1 == map[i + 1][j]) {
find(i + 1, j, map);
}
}
}
.从20*20的网格的左上角通往右下角有多少条路?
从一个2*2网格的左上角开始,有6条(不允许往回走)通往右下角的路。
对于20*20的网格,这样的路有多少条?
其实就是和上面的比较类似:
个人认为20*20的表格应该是21*21的数据进行解答。
代码如下:
public class ZhenXingZhongHuaBianXing {
public static void main(String[] args) {
int[][] a=new int[21][21];
for (int i = 0; i < a.length; i++) {
for (int j = 0; j < a[i].length; j++) {
if(i==0||j==0){
a[i][j]=1;
}
}
}
a[0][0]=0;
for (int i = 1; i < a.length; i++) {
for (int j = 1; j < a[i].length; j++) {
a[i][j]=a[i-1][j]+a[i][j-1];
}
}
System.out.println(a[20][20]);
}
}