华为-最高分是多少-Java

来源:互联网 发布:域名中国 编辑:程序博客网 时间:2024/04/29 14:49

思路可能比较简单,但是处理起来还是有许多细节要注意的。

import java.util.Scanner;/** * 题目描述 老师想知道从某某同学当中,分数最高的是多少,现在请你编程模拟老师的询问。当然,老师有时候需要更新某位同学的成绩.  * 输入描述: * 输入包括多组测试数据。 每组输入第一行是两个正整数N和M(0 < N <= 30000,0 < M < 5000),分别代表学生的数目和操作的数目。 * 学生ID编号从1编到N。 第二行包含N个整数,代表这N个学生的初始成绩,其中第i个数代表ID为i的学生的成绩 * 接下来又M行,每一行有一个字符C(只取‘Q’或‘U’),和两个正整数A,B,当C为'Q'的时候, * 表示这是一条询问操作,他询问ID从A到B(包括A,B)的学生当中,成绩最高的是多少 * 当C为‘U’的时候,表示这是一条更新操作,要求把ID为A的学生的成绩更改为B。  *  * 输出描述: 对于每一次询问操作,在一行里面输出最高成绩.  * 示例1 输入 * 5 7  * 1 2 3 4 5  * Q 1 5  * U 3 6  * Q 3 4  * Q 4 5  * U 4 5  * U 2 9  * Q 1 5 * 输出 * 5 6 5 9 *  * @author 崔洪振367 * @version 创建时间:2017年7月1日 上午9:00:34 */public class 最高分是多少 {public static void main(String[] args) {Scanner sc = new Scanner(System.in);while (sc.hasNext()) {String line = sc.nextLine();String[] firstStr = line.split("\\s");int N = Integer.parseInt(firstStr[0]);int M = Integer.parseInt(firstStr[1]);// 将学生成绩保存下来line = sc.nextLine();String[] gdStrings = line.split("\\s");int[] grades = new int[N];for (int i = 0; i < N; i++) {grades[i] = Integer.parseInt(gdStrings[i]);}// 处理QU问题for (int k = 0; k < M; k++) {String ss = sc.nextLine();String[] strings = ss.split("\\s");String flag = strings[0];int from = Integer.parseInt(strings[1]);int to = Integer.parseInt(strings[2]);if (flag.equals("Q")) {// 此处有坑-------from有可能小于toint maxValue = max(from - 1, to - 1, grades);// 从成绩中从from-1到to-1的最大值System.out.println(maxValue);} else if (flag.equals("U")) {// 出现U时,更新数组的成绩grades[from - 1] = to;}}}}/** * 从成绩数组中从start到end的最大值 *  * @param start * @param end * @param students * @return */public static int max(int start, int end, int[] scores) {if (start > end)return max(end, start, scores);else {int max = scores[start];for (int i = start + 1; i <= end; i++) {if (scores[i] > max)max = scores[i];}return max;}}}


原创粉丝点击