题目要求如下图所示:
解题思路:basestep:默认为1;
0 | 1 | … | n-3 | n-2 | n-1 | 位置 |
---|---|---|---|---|---|---|
3 | 2 | 1 | 0 | 4 | 0 | |
3<4 | 2<3 | 1<2 | 0<1 | 4>1 | 目的地 | basestep=1 |
5 | 4 | 3 | 2 | 1 | 更改后的basestep |
a[0]<basestep——>不可以到达最后
- 由前一项到达后一项最短距离需要1步,即basestep设置为1;
- 当第n-2项为0,即到达第n-1的距离需要在第n-3项才可以完成,第n-2项 需要m步,则第n-3项需要m+1步到达。
- 判断当前位置是否满足到达下一位置的基本步数,不满足,向前推进一个位置,则相对的basestep++,最后判定的条件自然归结为,最开始位置的元素大小是否大于等于basestep,如果大于等于,可以达到,反之则不可以。
主体代码:
int basestep=1;
for(int i=a.length-2;i>=0;i--)
{
if(a[i]>=basestep){
basestep=1;
}else{
basestep++;
}
}
if(a[0]>=basestep)
{
System.out.print("此条路可以到达");
}
题目代码:
public class Eggtest {
public static void main(String[] args) {
Scanner scan =new Scanner(System.in);
System.out.println("行数"+"\t"+"个数:");
int row=scan.nextInt();
int colum=scan.nextInt();
int [][]a=new int[row][colum];
//并且规定每行的最后一个元素为蛋黄酥0
//初始化蛋黄酥
for(int i=0;i<row;i++)
{
for(int j=0;j<colum;j++)
{
a[i][colum-1]=0;
}
}
//输入元素
for(int i=0;i<row;i++)
{
System.out.println("输入第"+(i+1)+"行元素,最后一位元素可以不输入:");
for(int j=0;j<colum-1;j++)
{
a[i][j]=scan.nextInt();
}
}
//输出元素
for(int i=0;i<row;i++)
{
for(int j=0;j<colum;j++)
{
System.out.print(a[i][j]+"\t");
}
System.out.println();
}
//判定可以吃得到的元素
System.out.println("输出结果:");
for(int i=0;i<a.length;i++)
{
int basestep=1;//由前一个到后面的数最少步数
for(int j=a[i].length-2;j>=0;j--)
{
if(a[i][j]>=basestep){
basestep=1;
}else{
basestep++;
}
}
//输出结果
if(a[i][0]>=basestep)
{
System.out.print((i+1)+"\t");
}
}
}
}
运行结果:
行数 个数:
3 6
输入第1行元素,最后一位元素可以不输入:
3 2 1 0 4
输入第2行元素,最后一位元素可以不输入:
1 2 2 0 3
输入第3行元素,最后一位元素可以不输入:
2 3 1 2 1
3 2 1 0 4 0
1 2 2 0 3 0
2 3 1 2 1 0
输出结果:
2 3