问题
等待登机的你看着眼前有老有小长长的队伍十分无聊,你突然 想要知道,是否存在两个年龄相仿的乘客。每个乘客的年龄用 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"
。
请确保输入和输出格式与题目描述一致,并注意边界条件的处理,例如数组下标和区间的范围。
代码
java
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();
}
}