Chinaunix首页 | 论坛 | 博客
  • 博客访问: 156522
  • 博文数量: 31
  • 博客积分: 0
  • 博客等级: 民兵
  • 技术积分: 360
  • 用 户 组: 普通用户
  • 注册时间: 2017-02-28 08:37
个人简介

没有绝活,怎能风骚.....

文章分类

全部博文(31)

文章存档

2017年(31)

我的朋友

分类: C/C++

2017-06-21 23:29:08

最高分是多少

描述:

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

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

题目类别:

排序

难度:

初级

分数:

 

运行时间限制:

无限制

内存限制:

无限制

阶段:

招聘管理

输入:

输入包含多组测试数据。

每组输入第一行是两个正整数NM(0

学生ID编号从1N

第二行包含N个整数,代表这N个学生的初始成绩,其中第i个数代表IDi的学生的成绩。

接下来有M行,每一行有一个字符C(只取‘Q’或‘U),和两个正整数A,B

C为‘Q’的时候,表示这是一条询问操作,它询问IDAB(包括A,B)的学生当中,成绩最高的是多少。

C为‘U’的时候,表示这是一条更新操作,要求把IDA的学生的成绩更改为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容器):

  1. #include <iostream>
  2. #include <vector>

  3. using namespace std;

  4. //获取从A到B学生中最高的分数
  5. int getMaxScore(vector<int> vec,int a,int b)
  6. {
  7.     int max = 0,i;
  8.     for (i=a-1;i<b;i++)
  9.     {
  10.         if (max<vec[i])
  11.         {
  12.             max = vec[i];
  13.         }
  14.     }
  15.     return max;
  16. }

  17. int main()
  18. {
  19.     int M,N,tem;//N为N个学生的成绩,M为M行命令,tem为录入学生成绩中间变量
  20.     cin>>N>>M;
  21.     vector<int> score;//使用vector容器保存学生的成绩
  22.     while(N--)
  23.     {
  24.         cin>>tem;
  25.         score.push_back(tem);//将录入的学生成绩放入vector容器
  26.     }

  27.     char mode;//定义命令字符变量
  28.     int A,B;
  29.     vector<int> answer;//使用vector容器保存Q命令输出的最高分数
  30.     while(M--)
  31.     {
  32.         cin.sync();
  33.         cin>>mode>>A>>B;
  34.         if (mode == 'Q')
  35.         {
  36.             answer.push_back(getMaxScore(score,A,B));//获取A到B学生间的最高分数
  37.         }
  38.         else if (mode == 'U')
  39.         {
  40.             score[A-1] = B;//更新指定学生的分数
  41.         }
  42.     }

  43.     vector<int>::iterator it;//使用迭代器访问vector容器里值
  44.     for (it=answer.begin();it!=answer.end();it++)
  45.     {
  46.         cout<<*it<<endl;
  47.     }
  48.     system("pause");
  49.     return 0;
  50. }

2.C语言编程代码
  1. #include <stdio.h>
  2. #include <stdlib.h>

  3. int main(int argc, const char *argv[])
  4. {
  5.     int N,M;//N为N个学生的成绩,M为M行命令
  6.     scanf("%d %d",&N,&M);
  7.     int *score = (int*)malloc(sizeof(int)*N);//为录入的学生成绩分配空间
  8.     int cmd[M];//定义M行命令行的数组,用于保存Q命令输出的最高分
  9.     int i = 0;
  10.     while(N--)//录入N个学生的成绩
  11.     {
  12.         scanf("%d",&score[i++]);
  13.     }

  14.     char mode;//定义命令字符变量
  15.     int A,B;
  16.     int n = 0;//定义n保存最高分数的个数
  17.     while(M--)//M行命令的录入
  18.     {
  19.         scanf("%c",&mode);
  20.         if(mode == '\n')//由于换行符'\n'也属于字符c,所以需要判断把它筛选掉
  21.         {
  22.             scanf("%c",&mode);
  23.         }
  24.         scanf("%d %d",&A,&B);
  25.         if(mode == 'Q')//获取A到B学生间的最高分数
  26.         {
  27.             int max = 0;
  28.             for(i=A-1;i<B;i++)
  29.             {
  30.                 if(score[i] > max)
  31.                 {
  32.                     max = score[i];
  33.                 }
  34.             }
  35.             cmd[n++] = max;
  36.         }
  37.         else if(mode == 'U')//更新指定学生的分数
  38.         {
  39.             score[A-1] = B;
  40.         }
  41.     }

  42.     for(i=0;i<n;i++)//输出保存的最高分数
  43.     {
  44.         printf("%d\n",cmd[i]);
  45.     }
  46.     free(score);
  47.     return 0;
  48. }
    代码都已经过测试,无误,个人更倾向于使用C++编程,因为封装性比较好,用起来方便。


阅读(2004) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~