亚洲国产日韩欧美在线a乱码,国产精品路线1路线2路线,亚洲视频一区,精品国产自,www狠狠,国产情侣激情在线视频免费看,亚洲成年网站在线观看

華為筆試題

時間:2020-08-16 15:51:33 華為認(rèn)證 我要投稿

華為2017筆試題

  華為認(rèn)證覆蓋路由交換、 無線局域網(wǎng)、無線、傳送網(wǎng)、安全、統(tǒng)一通信、視訊 、 云計算、服務(wù)器、存儲以及ICT融合設(shè)計等11個技術(shù)領(lǐng)域。下面是小編整理的關(guān)于華為2017筆試題,希望大家認(rèn)真閱讀!

華為2017筆試題

  1.刪除字符串中的指定字符

  1.1問題描述

  輸入兩個字符串M和N,從字符串M中刪除字符串N中所有的字符。例如,輸入”abcda”和”ac”,則刪除之后的'第一個字符串變成”bd”。

  1.2問題求解

  這個比較簡單,給出如下參考代碼:

  #include

  using namespace std;

  void deleteCharacter(string& str0,string& str1){

  for(int i=0;i

  if(str1.find(str0[i])!=string::npos){

  str0.erase(i,1);

  continue;

  }

  ++i;

  }

  }

  2.成績排名

  2.1問題描述

  題目總共包含如下兩種格式的字符串命令:

  LOD GRADE命令,其格式:

  LOD GRADE:NAME=XiaoMing,MATH=80,LANG=90;

  (1) 此命令用于導(dǎo)入學(xué)生成績

  (2) NAME字段表示學(xué)生姓名

  (3) MATH字段表示學(xué)生數(shù)學(xué)成績

  (4) LANG字段表示語文成績

  (5) MATH字段和LANG字段順序不一定MATH在前,LANG在后

  (6) 相同的分?jǐn)?shù),名次相同,后面的名次空缺;例如100,99,99,99,98,98,名次:1,2,2,2,5,5

  (7) 此命令會連續(xù)執(zhí)行,直到遇到第一個LST GRADE

  LST GRADE命令,其格式:

  LST GRADE:NAME=XiaoMing;

  (1) 此命令用于查詢學(xué)生成績

  (2) NAME字段表示學(xué)生姓名

  (3) 查詢結(jié)果格式:姓名 數(shù)學(xué) 語文 總分 數(shù)學(xué)排名 語文排名 總排名

  (4) 每組用例,此命令僅執(zhí)行一次

  輸入: 連續(xù)多組LOD GRADE后跟一個LST GRADE查詢命令

  輸出: 輸出查詢格式為:

  姓名 數(shù)學(xué) 語文 總分 數(shù)學(xué)排名 語文排名 總排名

  樣例輸入: LOD GRADE:NAME=XiaoMing,MATH=80,LANG=90;

  LOD GRADE:NAME=XiaoHong,LANG=60,MATH=100;

  LOD GRADE:NAME=XiaoMei,MATH=70,LANG=90;

  LST GRADE:NAME=XiaoHong;

  樣例輸出: XiaoHong 100 60 160 1 3 2

  2.2問題求解

  此問題也不難,沒有涉及到復(fù)雜的算法,就是比較繁瑣,主要考察數(shù)據(jù)的表示,字符串的提取與排序,下面給出參考代碼:

  #include

  #include

  #include

  #include

  using namespace std;

  struct Student{

  string name;

  int math;

  int lang;

  Student(){

  this->name="";

  this->math=0;

  this->lang=0;

  }

  Student(string name,int math,int lang){

  this->name=name;

  this->math=math;

  this->lang=lang;

  }

  bool operator==(const Student& ele){

  return this->name==ele.name;

  }

  };

  //自定義比較函數(shù),數(shù)學(xué)排名

  bool compareMath(const Student& left,const Student& right){

  return left.math>right.math; //降序排列

  }

  //自定義比較函數(shù),語文排名

  bool compareLang(const Student& left,const Student& right){

  return left.lang>right.lang; //降序排列

  }

  //自定義比較函數(shù),總分排名

  bool compareTotal(const Student& left,const Student& right){

  return left.math+left.lang>right.math+right.lang; //降序排列

  }

  int main(){

  vector studentVec;

  string input;

  Student student;

  vector splitedRes;

  while(getline(cin,input)){

  int s=input.find("NAME=");

  int e=input.find(',',s);

  if(input.find("LOD GRADE")!=string::npos){ //輸入成績

  student.name=input.substr(s+5,e-s-5);

  s=input.find("MATH=");

  e=input.find(',',s);

  if(e==string::npos) e=input.length()-1;

  student.math=stoi(input.substr(s+5,e-s-5));

  s=input.find("LANG=");

  e=input.find(',',s);

  if(e==string::npos) e=input.length()-1;

  student.lang=stoi(input.substr(s+5,e-s-5));

  studentVec.push_back(student);

  }else { //查詢成績

  e=input.length()-1;

  string name=input.substr(s+5,e-s-5);

  Student student;

  //數(shù)學(xué)排名

  std::sort(studentVec.begin(),studentVec.end(),compareMath);

  vector::iterator it=find(studentVec.begin(),studentVec.end(),Student(name,0,0));

  student=*it;

  while(it!=studentVec.begin()&&(it-1)->math==it->math) --it;

  int mathRank=it-studentVec.begin()+1;

  //語文排名

  std::sort(studentVec.begin(),studentVec.end(),compareLang);

  it=find(studentVec.begin(),studentVec.end(),Student(name,0,0));

  while(it!=studentVec.begin()&&(it-1)->lang==it->lang) --it;

  int langRank=it-studentVec.begin()+1;

  //總分排名

  std::sort(studentVec.begin(),studentVec.end(),compareTotal);

  it=find(studentVec.begin(),studentVec.end(),Student(name,0,0));

  while(it!=studentVec.begin()&&(it-1)->math+(it-1)->lang==it->math+it->lang) --it;

  int totalRank=it-studentVec.begin()+1;

  cout<

  cout<

  3.2動態(tài)規(guī)劃法求解

  遞歸法易于理解,但是存在對子問題的重復(fù)計算,時間效率低下,可以將子問題的結(jié)果存儲起來,把遞歸實現(xiàn),轉(zhuǎn)換為迭代實現(xiàn),這樣就變成了動態(tài)規(guī)劃。遞歸法是自頂向下,而動態(tài)規(guī)劃是自底向上遞歸法是需要某個結(jié)果時就調(diào)用自己來計算,動態(tài)規(guī)劃把每次遞推的結(jié)果保存在數(shù)組中。因為這里有i,ir,j,jr一個4個變量,所以其實需要一個4維數(shù)組,這里用了一個宏代替,將4維數(shù)組通過下標(biāo)轉(zhuǎn)變變?yōu)橐痪S數(shù)組。具體實現(xiàn)參考如下代碼:

  int func2 (const string &a ,const string &b) {

  const int la = (int) a.length () ;

  const int lb = (int) b.length () ;

  vector ret (la * la * lb * lb) ;

  #define VRET(a ,b ,c ,d) (ret[(a) * la * lb * lb + (b) * lb * lb + (c) * lb + (d)])

  for (int ix = la - 1 ; ix >= 0 ; ix--)

  for (int irx =ix ; irx < la ; irx++)

  for (int jx = lb - 1 ; jx >= 0 ; jx--)

  for (int jrx =jx ; jrx < lb ; jrx++) {

  int i = ix ;

  int ir = irx ;

  int j = jx ;

  int jr = jrx ;

  while (i <= ir && j <= jr && a[i] == b[j]) {

  i++ ;

  j++ ;

  }

  while (i <= ir && j <= jr && a[ir] == b[jr]) {

  ir-- ;

  jr-- ;

  }

  if (i > ir) { //A為空串

  VRET (ix ,irx ,jx ,jrx) = (jr + 1 - j) + 2 ;

  continue ;

  } else if (j > jr) { //B為空串

  VRET (ix ,irx ,jx ,jrx) = 2 ;

  continue ;

  }

  int tmp = 2 + (jr + 1 - j) + 2 ; //最壞情況,將A全部刪除再增加到B

  for (int k = i + 1 ; k <= ir ; k++)

  tmp = min (tmp ,2 + VRET (k ,ir ,j ,jr)) ;

  for (int k = ir - 1 ; k >= i ; k--)

  tmp = min (tmp ,2 + VRET (i ,k ,j ,jr)) ;

  for (int k = j + 1 ; k <= jr ; k++)

  tmp = min (tmp ,(k - j) + 2 + VRET (i ,ir ,k ,jr));

  for (int k = jr - 1 ; k >= j ; k--)

  tmp = min (tmp ,(jr-k) + 2 + VRET (i ,ir ,j ,k));

  VRET (ix ,irx ,jx ,jrx) = tmp ;

  continue ;

  }

  return VRET (0 ,la - 1 ,0 ,lb - 1) ;

  #undef VRET

【華為2017筆試題】相關(guān)文章:

華為上機(jī)試題匯總11-12

華為認(rèn)證筆試題大全11-09

華為面試題2017年05-20

華為2017筆試試題05-15

2017華為筆試面試試題05-15

華為認(rèn)證最新試題及答案09-27

華為測試面試題匯總09-02

2017華為JAVA考試試題10-26

華為Java面試題精選10-24