最高分是多少
描述:
老师想知道从某某同学到某某同学当中,分数最高的是多少。
现在请你编程模拟老师的询问。当然,老师有时候需要更新某位同学的成绩。
题目类别:
排序
难度:
初级
分数:
运行时间限制:
无限制
内存限制:
无限制
阶段:
招聘管理
输入:
输入包含多组测试数据。
每组输入第一行是两个正整数N和M(0
学生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
答案提示:
题目如上图所示,看完题目后,我们知道题目主要考查的知识点共有三个,分别是数据录入保存、数据排序和数据输出。下面将会通过C语言和C++语言对这套题目进行编程。
1.C++编程代码(主要使用了十分常用的vector容器):
#include
#include
using namespace std;
//获取从A到B学生中最高的分数
int getMaxScore(vector
{
int max = 0,i;
for (i=a-1;i
{
if (max { max = vec[i]; } } return max; } int main() { int M,N,tem;//N为N个学生的成绩,M为M行命令,tem为录入学生成绩中间变量 cin>>N>>M; vector while(N--) { cin>>tem; score.push_back(tem);//将录入的学生成绩放入vector容器 } char mode;//定义命令字符变量 int A,B; vector while(M--) { cin.sync(); cin>>mode>>A>>B; if (mode == 'Q') { answer.push_back(getMaxScore(score,A,B));//获取A到B学生间的最高分数 } else if (mode == 'U') { score[A-1] = B;//更新指定学生的分数 } } vector for (it=answer.begin();it!=answer.end();it++) { cout<<*it< } system("pause"); return 0; } 2.C语言编程代码 #include #include int main(int argc, const char *argv[]) { int N,M;//N为N个学生的成绩,M为M行命令 scanf("%d %d",&N,&M); int *score = (int*)malloc(sizeof(int)*N);//为录入的学生成绩分配空间 int cmd[M];//定义M行命令行的数组,用于保存Q命令输出的最高分 int i = 0; while(N--)//录入N个学生的成绩 { scanf("%d",&score[i++]); } char mode;//定义命令字符变量 int A,B; int n = 0;//定义n保存最高分数的个数 while(M--)//M行命令的录入 { scanf("%c",&mode); if(mode == '\n')//由于换行符'\n'也属于字符c,所以需要判断把它筛选掉 { scanf("%c",&mode); } scanf("%d %d",&A,&B); if(mode == 'Q')//获取A到B学生间的最高分数 { int max = 0; for(i=A-1;i
{ if(score[i] > max) { max = score[i]; } } cmd[n++] = max; } else if(mode == 'U')//更新指定学生的分数 { score[A-1] = B; } } for(i=0;i { printf("%d\n",cmd[i]); } free(score); return 0; } 代码都已经过测试,无误,个人更倾向于使用C++编程,因为封装性比较好,用起来方便。