链接:https://www.nowcoder.com/questionTerminal/3897c2bcc87943ed98d8e0b9e18c4666
来源:牛客网
老师想知道从某某同学当中,分数最高的是多少,现在请你编程模拟老师的询问。当然,老师有时候需要更新某位同学的成绩.
输入描述:
输入包括多组测试数据。
每组输入第一行是两个正整数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
来源:牛客网
老师想知道从某某同学当中,分数最高的是多少,现在请你编程模拟老师的询问。当然,老师有时候需要更新某位同学的成绩.
输入描述:
输入包括多组测试数据。
每组输入第一行是两个正整数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
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
int highestpoint(int *,int,int);
int main()
{
int numberofstudent=0;
int operationnum=0;
int *inputscore;
char operation;
int inputnum1,inputnum2;
int outputscore;
int i;
while(scanf("%d%d",&numberofstudent,&operationnum) != EOF)
{
inputscore = (int *)malloc(sizeof(int)*numberofstudent);
for(i=0;i<numberofstudent;i++)
{
scanf("%d",&inputscore[i]);
}
for(i=0;i<operationnum;i++)
{
//setbuf(stdin,NULL);
getchar();
scanf("%c",&operation);
if(operation == 'Q')
{
scanf("%d%d", &inputnum1, &inputnum2);
//int start = inputnum1-1;
//int end = inputnum2;
outputscore = highestpoint(inputscore,inputnum1,inputnum2);
printf("%d\n",outputscore);
}
if(operation == 'U')
{
scanf("%d%d", &inputnum1, &inputnum2);
//int update = inputnum1-1;
//int updatescore = inputnum2;
inputscore[inputnum1-1] = inputnum2;
}
}
}
return 0;
}
int highestpoint(int *a,int start,int end)
{
int highpoint;
int temp;
int i;
if(start > end)
{
temp = end;
end = start;
start = temp;
}
highpoint = a[start-1];
for(i =start-1;i<end;i++)
{
if(a[i]>highpoint)
highpoint = a[i];
}
return highpoint;
}
第一次在牛客网上答题。所以过程也非常纠结,多次在自己vim上没问题,但在牛客上就是不行。说说这个收获吧。
(1)牛客上的输入都是多条数据的,所以第一条scanf语句需要用while写成
while(scanf()!=EOF)的形式。这里需要充分理解题意
(2)由于scanf输入char类型数据时会将缓冲区里的空格或者换行符都读到,所以我在vim下使用的是setbuf(stdin,NULL)函数。
但是这个函数只能在linux下有效,在牛客上是不行的(这个浪费了我好多时间,很气)。放到牛客网需要换成getchar(),或者在scanf的格式写成“ %c”,在%c前加一个空格。