一、题目链接
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 {
public boolean isJolly(int[] nums) {
int n = nums.length;
int[] occur = new int[n];
for (int i = 0; i < n - 1; i++) {
int t = Math.abs(nums[i + 1] - nums[i]);
if (1 <= t && t <= n - 1) {
occur[t]++;
if (occur[t] > 1) {
return false;
}
}
else {
return false;
}
}
return true;
}
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");
}
}