2017.6.27
华为面试题目,自己写完,功能运行基本满足要求(自己认为),最后发现题目的测试要求和自己写的程序不是完全对应,致使没有输出结果。哎。。菜
总结:看准题目的测试要求,题目给的每个变量都是有它的用处!!!
贴上自己的程序,仅记录!希望大家批评指正。
题目是:
#include<iostream>
using namespace std;
int main()
{
int N,M;
cout<<"输入人数N和操作数目M"<<endl;
cin>>N>>M;
cout<<"输入N个人的初始成绩"<<endl;
int *grade=new int[N];
for(int i=0;i<N;i++)
{
cin>>grade[i];
}
//for(int j=0;j<N;j++)
//{
// cout<<grade[j]<<endl;
//}
cout<<"请提问或者更新,以* * *的格式"<<endl;
char meng[3]={'Q','U'};
char name;
int num1,num2,tmp=grade[0];
//int b=1;
while (cin>>name>>num1>>num2)
{
if(meng[0]==name)
{
for(int i=num1-1;i<num2;i++)
{
if(tmp<grade[i])
tmp=grade[i];
}
cout<<"输出最高成绩"<<tmp<<endl;
}
else {
if (meng[1]==name)
grade[num1]=num2;
}
}
delete [] grade;
return 0;
}
网上大佬方法:
链接:http://www.cnblogs.com/whc-uestc/p/4733992.html
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
int main(){
int n,m; //人数和操作数;
while(scanf("%d %d",&n,&m)!=EOF)
{
int *score = (int*)malloc(sizeof(int)*(n+1));
int res[5000]; //5000次操作数,可能的5000次输出。因为包含更新,数组最大不会大于5000
int cnt = 0; //记录Q的次数;
//这里写成for(int i=0; i<n; i++)可以提交成功,
//但是那是错误的,估计是华为OJ测试平台有问题,测试平台的下标可能是从0开始的,坑爹
for(int i=1; i<=n; i++)
scanf("%d",&score[i]);
char t;
int a=0,b=0;
while(m--)
{
scanf("%c",&t);
if(t == '\n') //如果输入回车,则再次要求输入相应的字符;
scanf("%c",&t);
scanf("%d %d",&a,&b); //输入相应的数字;
if(t == 'Q')
{
int max = 0;
for(int i=a;i<=b;i++)
{
if(score[i] > max)
max = score[i];
}
res[cnt++] = max; //每次Q之后,将求得最大的数保存在res数组中;
}else
score[a] = b; //U操作只要更新数据就行了;
}
for(int i=0; i<cnt; i++) //最后通过一个循环将之前Q的操作数据,一次性输出即可;
printf("%d\n",res[i]);
free(score);
}
return 0;
}
已修改代码:
#include<iostream>
using namespace std;
int main()
{
int N,M;
cin>>N>>M;
int res[5000];
int cnt=0;
int *grade=new int[N];
for(int i=0;i<N;i++)
{
cin>>grade[i];
}
char meng[3]={'Q','U'};
char name;
int num1,num2;
//while (cin>>name>>num1>>num2)
//{
while(M--)
{
cin>>name>>num1>>num2;
if(meng[0]==name)
{
int tmp=0;
for(int i=(num1-1);i<num2;i++)
{
if(tmp<grade[i])
tmp=grade[i];
}
res[cnt++]=tmp;
}
else
{
if (meng[1]==name)
grade[num1-1]=num2;
}
}
for(int i=0;i<cnt;i++)
{
cout<<res[i]<<endl;
}
//}
delete [] grade;
return 0;
}
|