07:有趣的跳跃

一、题目链接

http://noi.openjudge.cn/ch0106/07/

二、解题思路

◎ n个元素两两相邻做差的绝对值,可以得到n-1个非负整数,如果这n-1个非负整数使得[1,n-1]范围内的每个数出现且仅出现一次,则存在有
趣的跳跃,否则不存在有趣的跳跃。

三、实施步骤

◆ 方法public boolean isJolly(int[] nums)处理所有业务逻辑:
   → 参数nums为int类型的数组,代表给定数组;
   → 方法isJolly返回true当且仅当nums中存在有趣的跳跃,否则false。
◇ 方法isJolly实施步骤如下:
◎ 首先,定义int类型的整数n,代表nums数组的长度,初始时n=nums.length;
◎ 其次,定义int类型的数组occur[n],标记[1,n-1]范围内每个数出现的次数,初始时所有元素均为0;
◎ 然后,通过标记i代表nums数组中元素的下标,i从0开始,到n-2为止,更新步长为1,循环处理如下:
   → 定义int类型的整数t,代表相邻两个元素的差值的绝对值,令t=Math.abs(nums[i+1]-nums[i]);
   → 如果1<=t&&t<=n-1:令occur[t]++;
	 *** 如果occur[t]>1:返回false;
	 否则:返回false;
◎ 最后,返回true。
◇ 在方法main中输入数组长度、数组元素,将它们作为参数注入方法isJolly,输出计算结果。

四、Java程序

import java.util.Scanner;

public class Main {

    /**
     * 判断给定数组是否存在有趣的跳跃
     *
     * @param nums int类型的数组,代表给定数组
     * @return true当且仅当nums中存在有趣的跳跃,否则false
     */
    public boolean isJolly(int[] nums) {
        int n = nums.length; // nums数组的长度
        int[] occur = new int[n]; // 标记[1,n-1]范围内每个数出现的次数,初始时均为0
        /* 标记i代表nums数组中元素的下标,i从0开始,到n-2为止,更新步长为1 */
        for (int i = 0; i < n - 1; i++) {
            int t = Math.abs(nums[i + 1] - nums[i]); // 计算相邻两个元素的差值的绝对值
            if (1 <= t && t <= n - 1) { // 如果t在[1,n-1]范围内
                occur[t]++; // 该值出现的次数加1
                if (occur[t] > 1) { // 如果该值出现了至少两次
                    return false; // nums数组中不存在有趣的跳跃
                }
            }
            else { // 否则,t不在[1,n-1]范围内
                return false; // nums数组中不存在有趣的跳跃
            }
        }
        return true; // 以上没有返回false,说明nums数组中存在有趣的跳跃
    }

    public static void main(String[] args) {
        Main test = new Main();
        Scanner input = new Scanner(System.in);
        int n = input.nextInt();
        int[] nums = new int[n];
        for (int i = 0; i < n; i++) {
            nums[i] = input.nextInt();
        }
        System.out.print(test.isJolly(nums) ? "Jolly" : "Not jolly");
    }
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

江苏科技大学_计算机学院_潘磊

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值