最高分是多少
|
描述:
|
老师想知道从某某同学到某某同学当中,分数最高的是多少。
现在请你编程模拟老师的询问。当然,老师有时候需要更新某位同学的成绩。
|
题目类别:
|
排序
|
难度:
|
初级
|
分数:
|
|
运行时间限制:
|
无限制
|
内存限制:
|
无限制
|
阶段:
|
招聘管理
|
输入:
|
输入包含多组测试数据。
每组输入第一行是两个正整数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 <iostream>
-
#include <vector>
-
-
using namespace std;
-
-
//获取从A到B学生中最高的分数
-
int getMaxScore(vector<int> vec,int a,int b)
-
{
-
int max = 0,i;
-
for (i=a-1;i<b;i++)
-
{
-
if (max<vec[i])
-
{
-
max = vec[i];
-
}
-
}
-
return max;
-
}
-
-
int main()
-
{
-
int M,N,tem;//N为N个学生的成绩,M为M行命令,tem为录入学生成绩中间变量
-
cin>>N>>M;
-
vector<int> score;//使用vector容器保存学生的成绩
-
while(N--)
-
{
-
cin>>tem;
-
score.push_back(tem);//将录入的学生成绩放入vector容器
-
}
-
-
char mode;//定义命令字符变量
-
int A,B;
-
vector<int> answer;//使用vector容器保存Q命令输出的最高分数
-
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<int>::iterator it;//使用迭代器访问vector容器里值
-
for (it=answer.begin();it!=answer.end();it++)
-
{
-
cout<<*it<<endl;
-
}
-
system("pause");
-
return 0;
-
}
2.C语言编程代码
-
#include <stdio.h>
-
#include <stdlib.h>
-
-
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<B;i++)
-
{
-
if(score[i] > max)
-
{
-
max = score[i];
-
}
-
}
-
cmd[n++] = max;
-
}
-
else if(mode == 'U')//更新指定学生的分数
-
{
-
score[A-1] = B;
-
}
-
}
-
-
for(i=0;i<n;i++)//输出保存的最高分数
-
{
-
printf("%d\n",cmd[i]);
-
}
-
free(score);
-
return 0;
-
}
代码都已经过测试,无误,个人更倾向于使用C++编程,因为封装性比较好,用起来方便。
阅读(2004) | 评论(0) | 转发(0) |