写出下边问题完整且精准的Java代码 题目描述: 给出一个数组。你需要求出按顺序对其进行一系列区间操作后最终所得的数组。操作有三种: 1.将下标在L到R之间的元素全部或上X。 2将下标在L到R之间的元素全部与上X。 3.将下标在L到R之间的元素全部设为X。 输入描述: 第一行有一个正整数N(1<=N<= 00000)代表数组的长度。 第二行有N个非负整数,范围在0到2^20-1之间,代表数组中的元素。 第三行有一个正整数M(1<=M<=100000);代表操作次数。 第四行有M个正整数,代表M次操作中的区间左端点。 第五行有M个正整数,代表M次操作中的区间右端点R。 第六行是一个长度为M的字符串,T代表操作1,&代表操作2,一代表操作3.第七行有M个正整数,代表M次操作中的参数X。 输出描述: 在行中输出N个数,代表所有操作按顺序完成后最终所得的数组。
时间: 2023-05-31 20:01:56 浏览: 109
S代表操作2,C代表操作3。
代码如下:
import java.util.Scanner;
public class Main {
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
int n = sc.nextInt();
int[] arr = new int[n];
for (int i = 0; i < n; i++) {
arr[i] = sc.nextInt();
}
int m = sc.nextInt();
int[] l = new int[m];
int[] r = new int[m];
String[] op = new String[m];
for (int i = 0; i < m; i++) {
l[i] = sc.nextInt() - 1;
}
for (int i = 0; i < m; i++) {
r[i] = sc.nextInt() - 1;
}
String str = sc.next();
for (int i = 0; i < m; i++) {
op[i] = str.substring(i, i + 1);
}
for (int i = 0; i < m; i++) {
if (op[i].equals("T")) {
int x = sc.nextInt();
for (int j = l[i]; j <= r[i]; j++) {
arr[j] |= x;
}
} else if (op[i].equals("S")) {
int x = sc.nextInt();
for (int j = l[i]; j <= r[i]; j++) {
arr[j] &= x;
}
} else if (op[i].equals("C")) {
int x = sc.nextInt();
for (int j = l[i]; j <= r[i]; j++) {
arr[j] = x;
}
}
}
for (int i = 0; i < n; i++) {
System.out.print(arr[i] + " ");
}
}
}
注意:题目中的数组下标从1开始,而Java中数组下标从0开始,所以在输入区间左右端点时要减1。另外,题目中的操作1、2、3对应的操作符分别为T、S、C,需要将字符串中的每个字符分别存储到一个数组中。最后输出结果时,要输出每个元素后面加一个空格。
阅读全文