问题
等待登机的你看着眼前有老有小长长的队伍十分无聊,你突然 想要知道,是否存在两个年龄相仿的乘客。每个乘客的年龄用 1个0 到 36500 的整数表示,两个乘客的年龄相差 365 以内 就认为是相仿的。 具体来说,你有一个长度为 n 的数组,每个数组元素都是一 个0~ 36500 的整数。
给出q个二元组l,r,判断数组在区 间[l,r]上是否存在两个差值小于等于 365 的数,
若存在输出 YES,否则输出 NO。
输入格式 第一行两个整数 n,q,表示乘客数和询问数。 接下来一行 n 个整数,表示乘客的年龄。 接下来q行,每行两个整数 l,r表示查询。
输出格式 q行,每行输出 YES 或者 NO,分别表示区间内存在/不存在 年龄相仿的乘客。题目来蓝桥云
解析
这段代码首先读取乘客数 n
和询问数 q
。然后,它读取乘客的年龄数组 ages
。接下来,对于每个查询 [l, r]
,它使用双重循环来查找区间内是否存在两个年龄相仿的乘客。在内部循环中,对于每对乘客年龄,它计算它们的差值是否小于等于 365。如果找到了满足条件的乘客年龄对,就将 found
置为 true
,并且在最外层循环中跳出。最后根据 found
的值输出相应的结果 "YES"
或 "NO"
。
请确保输入和输出格式与题目描述一致,并注意边界条件的处理,例如数组下标和区间的范围。
代码
import java.util.Scanner;public class SimilarAges {public static void main(String[] args) {Scanner scanner = new Scanner(System.in);// 读取乘客数和询问数int n = scanner.nextInt();int q = scanner.nextInt();// 读取乘客年龄数组int[] ages = new int[n];for (int i = 0; i < n; i++) {ages[i] = scanner.nextInt();}// 处理每个查询for (int i = 0; i < q; i++) {// 读取查询的左右边界int l = scanner.nextInt();int r = scanner.nextInt();// 判断是否存在相似年龄的乘客boolean found = false;// 使用双重循环查找区间内的年龄是否相似for (int j = l - 1; j < r; j++) {for (int k = j + 1; k < r; k++) {if (Math.abs(ages[j] - ages[k]) <= 365) {found = true;break;}}if (found) {break;}}// 输出结果if (found) {System.out.println("YES");} else {System.out.println("NO");}}scanner.close();}
}