2016华为校招机试题目01

论坛 期权论坛 编程之家     
选择匿名的用户   2021-6-2 20:59   2178   0

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;
}



分享到 :
0 人收藏
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

积分:3875789
帖子:775174
精华:0
期权论坛 期权论坛
发布
内容

下载期权论坛手机APP