當前位置:文思屋>社會工作>IT認證>

華為2017筆試題

文思屋 人氣:1.64W

華為認證覆蓋路由交換、 無線區域網、無線、傳送網、安全、統一通訊、視訊 、 雲端計算、伺服器、儲存以及ICT融合設計等11個技術領域。下面是小編整理的關於華為2017筆試題,希望大家認真閱讀!

華為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((str0[i])!=string::npos){

e(i,1);

continue;

}

++i;

}

}

2.成績排名

2.1問題描述

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

LOD GRADE命令,其格式:

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

(1) 此命令用於匯入學生成績

(2) NAME欄位表示學生姓名

(3) MATH欄位表示學生數學成績

(4) LANG欄位表示語文成績

(5) MATH欄位和LANG欄位順序不一定MATH在前,LANG在後

(6) 相同的分數,名次相同,後面的名次空缺;例如100,99,99,99,98,98,名次:1,2,2,2,5,5

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

LST GRADE命令,其格式:

LST GRADE:NAME=XiaoMing;

(1) 此命令用於查詢學生成績

(2) NAME欄位表示學生姓名

(3) 查詢結果格式:姓名 數學 語文 總分 數學排名 語文排名 總排名

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

輸入: 連續多組LOD GRADE後跟一個LST GRADE查詢命令

輸出: 輸出查詢格式為:

姓名 數學 語文 總分 數學排名 語文排名 總排名

樣例輸入: 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問題求解

此問題也不難,沒有涉及到複雜的演算法,就是比較繁瑣,主要考察資料的表示,字串的提取與排序,下面給出參考程式碼:

#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==;

}

};

//自定義比較函式,數學排名

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

return >; //降序排列

}

//自定義比較函式,語文排名

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

return >; //降序排列

}

//自定義比較函式,總分排名

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

return +>+; //降序排列

}

int main(){

vector studentVec;

string input;

Student student;

vector splitedRes;

while(getline(cin,input)){

int s=("NAME=");

int e=(',',s);

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

=tr(s+5,e-s-5);

s=("MATH=");

e=(',',s);

if(e==string::npos) e=th()-1;

=stoi(tr(s+5,e-s-5));

s=("LANG=");

e=(',',s);

if(e==string::npos) e=th()-1;

=stoi(tr(s+5,e-s-5));

_back(student);

}else { //查詢成績

e=th()-1;

string name=tr(s+5,e-s-5);

Student student;

//數學排名

std::sort(n(),(),compareMath);

vector::iterator it=find(n(),(),Student(name,0,0));

student=*it;

while(it!=n()&&(it-1)->math==it->math) --it;

int mathRank=n()+1;

//語文排名

std::sort(n(),(),compareLang);

it=find(n(),(),Student(name,0,0));

while(it!=n()&&(it-1)->lang==it->lang) --it;

int langRank=n()+1;

//總分排名

std::sort(n(),(),compareTotal);

it=find(n(),(),Student(name,0,0));

while(it!=n()&&(it-1)->math+(it-1)->lang==it->math+it->lang) --it;

int totalRank=n()+1;

cout<<<<" p="">

cout<

3.2動態規劃法求解

遞迴法易於理解,但是存在對子問題的重複計算,時間效率低下,可以將子問題的結果儲存起來,把遞迴實現,轉換為迭代實現,這樣就變成了動態規劃。遞迴法是自頂向下,而動態規劃是自底向上遞迴法是需要某個結果時就呼叫自己來計算,動態規劃把每次遞推的結果儲存在陣列中。因為這裡有i,ir,j,jr一個4個變數,所以其實需要一個4維陣列,這裡用了一個巨集代替,將4維陣列通過下標轉變變為一維陣列。具體實現參考如下程式碼:

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

const int la = (int) th () ;

const int lb = (int) th () ;

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

TAGS:筆試 華為