2015华为机试——最高分是多少

题目描述:

老师想知道从某某同学到某某同学当中,分数最高的是多少。

现在请你编程模拟老师的询问。当然,老师有时候需要更新某位同学的成绩。

题目类别: 排序

难度: 初级

运行时间限制: 无限制

内存限制: 无限制

阶段: 入职前练习

输入:

输入包含多组测试数据。

每组输入第一行是两个正整数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。

输出:

对于每一次询问操作,在一行里面输出最高成绩。

样例输入:

5 6

1 2 3 4 5

Q 1 5

U 3 6

Q 3 4

Q 4 5

U 2 9

Q 1 5

样例输出:

5

6

5

9

代码如下:

public class zui_GaoFen
{

	public static void main(String[] args)
	{
		Scanner sc=new Scanner(System.in);
		//初始化数据 N:学生数量  M:操作数量
		String firstLine=sc.nextLine();
		String[] initalNums=firstLine.split(" ");
		int N=Integer.parseInt(initalNums[0]);
		int M=Integer.parseInt(initalNums[1]);

		//初始化成绩
		String secondLine=sc.nextLine();
		int []scores=new int[N];
		scores=getScores(secondLine);

		//命令
		int[] Max=new int[M];
		int count=0;
		for (int i = 0; i < M; i++)
		{
			String q_or_u=sc.next();
			if (q_or_u.equals("Q"))
			{
				int a=sc.nextInt();
				int b=sc.nextInt();
				Max[count]=getMax(scores,a-1,b-1);
				count++;
			}
			if (q_or_u.equals("U"))
			{
				int a=sc.nextInt();
				int b=sc.nextInt();
				scores[a-1]=b;
			}
		}
		for (int i = 0; i < count; i++)
		{
			System.out.println(Max[i]);
		}
		sc.close();
	}

	public static int getMax(int[] score,int a,int b)
	{
		int temp=score[a];
		for (int i = a; i <= b; i++)
		{
			if (score[i]>temp)
			{
				temp=score[i];
			}
		}
		return temp;
	}

	public static int[] getScores(String secondLine)
	{
		String[] scores=secondLine.split(" ");
		int []res=new int[scores.length];
		for (int i = 0; i < scores.length; i++)
		{
			res[i]=Integer.parseInt(scores[i]);
		}
		return res;
	}
}

版权声明:本文为博主原创文章,未经博主允许不得转载。

时间: 2024-10-10 03:03:52

2015华为机试——最高分是多少的相关文章

2015华为机试

第一题(60分): 按要求分解字符串,输入两个数M,N:M代表输入的M串字符串,N代表输出的每串字符串的位数,不够补0.例如:输入2,8, "abc" ,"123456789",则输出为"abc00000","12345678","90000000" #include<iostream> using namespace std; void solve(char *str , int n , in

2015华为机试——小明的筷子

题目描述: 小明是个马大哈,某天他到超市买了若干双筷子(n<20)筷子的长度不尽相同,他把全部筷子都放在购物袋里面拿回家,路上不小心漏了一根 请你用程序帮他找出是漏掉的筷子是多长的. 输入:  剩下的筷子数组,如:1, 2, 3, 2, 1, 3, 2 返回值:漏掉的筷子长度,如上述输入返回:2(当输入的筷子数据异常时返回-1,如:找不到漏掉的筷子) 解题思路:使用HashMap对筷子的种类与数量进行键值对匹配存储,当出现重复筷子时,对应的筷子数量+1,然后遍历一次HashMap,获取筷子的数量

2015华为机试——计算两个正整数的最大公约数和最小公倍数

题目描述: 接口说明 原型: long getMaxDivisor(long lFirstInput, long lSecondInput); 输入参数: int first: 第一个整数; int second: 第二个整数; 返回值: 最大公约数 long getMinMultiple(long lFirstInput, long lSecondInput); 输入参数: int first: 第一个整数; int second: 第二个整数; 返回值: 最小公倍数 解题思路:使用辗转相除法

2015华为机试——尼科彻斯定理

题目描述: 验证尼科彻斯定理,即:任何一个整数m的立方都可以写成m个连续奇数之和.m属于[1,100],超出范围则报错. 例如: 1^3=1 2^3=3+5 3^3=7+9+11 4^3=13+15+17+19 解题思路:不难发现展开式从(n*n - n + 1)开始,步进2显示,共显示n个数. 代码如下: public static void main(String[] args) { Scanner sc=new Scanner(System.in); while (sc.hasNext()

2015华为机试—— 字符变换

题目描述: 输入一个字符串,将其中大写字母转换为对应小写字母之后的第五个字母,若原始大写字母为V-Z, 则转换为对应小写字母的值减21.其他字符不变,输出转换后的字符串. 例如,对于字母A,则转换为小写字母f:若形参是字母W,则转换为小写字母b. 输入:字符串 输出:转换后的字符串 样例输入:Axs3mWss 样例输出:fxs3mbss 题目不难,直接看代码: public class char_Change { public static void main(String[] args) {

2015华为机试——整数分割

题目描述: 一个整数可以拆分为2的幂的和,例如: 7 = 1+ 2 + 4 7 = 1 + 2 + 2 + 2 7 = 1 + 1 + 1 + 4 7 = 1 + 1 + 1 + 2 + 2 7 = 1 + 1 + 1 + 1 + 1 + 2 7 = 1 + 1 + 1 + 1 + 1 + 1 + 1 总共有六种不同的拆分方式 再比如: 4可以拆分成: 4 = 4, 4 = 1+1+1+1, 4 = 2+2, 4 = 1+1+2. 用f(n)表示n的不同拆分的种数,例如f(7) = 6. 要求读

2015华为机试——高次方数的尾数

题目描述: 求解M的N次方的最后三位数(M,N均大于10). 接口说明 原型: int GetLast3DigitsOfMN(int M, int N); 输入参数: int M:M > 10 int N:N > 10 返回值: M的N次方的最后三位数 解题思路: 思路一:先求M的N次方,然后M^N%1000求最后三位数,但是M的N次方很有可能会溢出,导致输出结果异常或错误. 思路二:思路一不行的话,我们得找到他对应的等效方法,M每乘M就对1000求余,其最后三位数是等效的. 代码如下: pu

2015华为机试—— 整型数排序

要求:请实现对一整型数序列的排序操作. 需求: 1.对输入的整型数序列A,完成升序排列,将结果序列从B中输出.以整数值大小为关键字排序,即小数在前,大数在后. 2.当序列中存在多个同样大小的数时,输出序列中仅保留一个. 举例: 输入序列A:76,92,34,34,59,16,59,45 符合要求的输出序列B:16,34,45,59,76,92 约束: 1.输入的序列至少含有一个整型数,否则应该返回null: 2.输入序列中的整数值使用int类型: 接口说明 /******************

2015华为机试—— 输入整型数组和排序标识,对其元素按照升序或降序进行排序

接口说明 原型: void sortIntegerArray(Integer[] pIntegerArray, int iSortFlag); 输入参数: Integer[] pIntegerArray:整型数组 int  iSortFlag:排序标识:0表示按升序,1表示按降序 输出参数: 无 返回值: void 这题比较简单,也没什么思路好说,直接看代码 代码如下: public final class Demo { // 功能:输入整型数组,对其元素按照升序或降序进行排序 // 输入:pI