• 跳一跳


    【问题描述】输入一个数组(数字>=0)-1结束,你最初处于数组的第一个位置,你所处于的位置的数字表示你能跳几格,

                         判断你最终是否能正好跳到数组的最后一个位置,能就输出Yes不能输出No

    【样例输入】1 3 1 2 3 1 2 2 1 4 -1
    【样例输出】Yes
    【样例输入】2 3 2 6 0 3 -1

    【样例输出】No

     【样例说明】递归递归

    【思路分析】出题人强调使用递归,但我实在是没写过递归,又赶时间上交。就没用递归

          先定义了一个长度为50的数组data,保证够他输入数据。

          if判断接受数据,count计数数组元素个数。

          定义第二个数组data1,长度为count,元素为data中的元素。

          接下来就算是整个代码的核心了,也是题目最难的部分(用递归可能很简单)。

          for循环100次,实际上肯定用不了。

          A为他每次跳完后所在位置上的值,如果这些值加起来刚好等于数组长度-1,那就说明最后刚好跳到数组最后一个元素上,输出Yes

    【代码如下】(原创并已测试)

     public static void main(String[] args) {
      int count = 0;
      int[] data = new int[50];
      for (int i = 0; i < data.length; i++) {
       count++;
       int n = sc.nextInt();
       if (n != -1) {
        data[i] = n;
       }
       if (n == -1) {
        break;
       }
      }
      int[] data1 = new int[count - 1];
      for (int i = 0; i < count - 1; i++) {
       data1[i] = data[i];
      }
      int a = 0;
      int A = 0;//数组元素的值
      for (int i = 0; i < 100; i++) {
       A = A + a + 0;
       if (A > data1.length) {//如果他直接跳出了数组,输出No。所以这个要写到前面,判断一下是否跳出了数组,要不然程序直接就会崩溃。如果没有,再执行a = data1[A]
        System.out.println("No");
        break;
       }
       a = data1[A];//下一步应该跳到第几个位置
       if (a == 0 && A < data1.length - 1) {//如果刚好跳到一个为0的元素上,且不是最后一个元素,此时再如何循环也不会往下跳了,直接输出No
        System.out.println("No");
        break;
       }
       if (A == data1.length - 1) {//这是刚好跳到最后一个位置
        System.out.println("Yes");
        break;
       }
      }
     }
    这是for循环加一个一个的if语句判断得出的。如果哪位大佬会递归,或者有更简单的方法,欢迎指教,欢迎指教!
  • 相关阅读:
    Java实现简单的图片浏览器
    ArrayList源码笔记
    JZ12 数值的整数次方算法笔记
    TCP的三次握手与四次挥手学习笔记
    Deepin安装LAMP环境
    Deepin安装Mysql(解决"没有可安装候选"问题)
    流行的Linux系统合集
    Win10超简单安装,菜鸡钊的装机经验分享
    Java入门(七)之面向对象-划重点
    Java入门(六)之常用的类
  • 原文地址:https://www.cnblogs.com/HeSC980513/p/11914320.html
Copyright © 2020-2023  润新知