【华为上机试题C++】老师想知道从某某同学当中,分数最高的是多少,现在请你编程模拟老师的询问。当然,老师有时候需要更新某位同学的成绩.

本文为转载,原博客地址:http://blog.csdn.net/DoverMine/article/details/48287253

老师想知道从某某同学当中,分数最高的是多少,现在请你编程模拟老师的询问。当然,老师有时候需要更新某位同学的成绩.

输入描述:

输入包括多组测试数据。
每组输入第一行是两个正整数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 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

[cpp]  view plain  copy
  1. #include <iostream>  
  2. using namespace std;  
  3. int grades[30000];  
  4. int max(int x, int y)  
  5. {  
  6.     int  temp;  
  7.     temp = grades[x];  
  8.     for (int i = x+1; i <= y; i++)  
  9.     {  
  10.         if (temp<grades[i])  
  11.         {  
  12.             temp = grades[i];  
  13.         }  
  14.     }  
  15.     return temp;  
  16. }  
  17. int main() {  
  18.     int N, M, x, y;  
  19.     char j;  
  20.     while(cin >> N >> M)  
  21.         {  
  22.     for (int i = 0; i < N; i++)  
  23.     {  
  24.         cin >> grades[i];  
  25.   
  26.     }  
  27.   
  28.     for(;M--;)  
  29.         {  
  30.         cin >> j >> x >> y;  
  31.         if (j =='Q')  
  32.         {  
  33.             if(x>y)  
  34.                 {  
  35.                 int temp2=y;  
  36.                 y=x;  
  37.                 x=temp2;               
  38.             }  
  39.             int temp = max( x - 1, y - 1);  
  40.             cout << temp << endl;  
  41.         }  
  42.         else if (j =='U')  
  43.         {  
  44.             grades[x - 1] = y;  
  45.         }  
  46.         else  
  47.         {  
  48.             cout << "您输入有误" << endl;  
  49.         }  
  50.        }  
  51.     }  
  52.       
  53.     return 0;  
  54. }
#include <iostream>
using namespace std;

int grade[30000];

int max(int x, int y)
{
	int temp;
	temp = grade[x];
	for (int i = x + 1; i <= y; i++){
		if (temp < grade[i]){
			temp = grade[i];
		}	
	}
	return temp;
}

int main()
{
	int N, M, A, B;
	char C;
	while (cin >> N >> M){   //循环出问题

		for (int i = 0; i < N; i++){
			cin >> grade[i];
		}

		while (M--)
		{
			cin >> C >> A >> B;
			cout << C << endl;
			if (C == 'Q'){
				if (A > B)
				{
					int temp = A;
					A = B;
					B = temp;
				}
				int m = max(A - 1, B - 1);
				cout << m << endl;
			}
			else if (C == 'U'){
				grade[A - 1] = B;
			}
			else{
				cout << "error" << endl;
			}
		}
	}
	return 0;
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值