2022年華為軟件工程師面試題(應(yīng)聘 求職 面試準(zhǔn)備資料)_第1頁
2022年華為軟件工程師面試題(應(yīng)聘 求職 面試準(zhǔn)備資料)_第2頁
2022年華為軟件工程師面試題(應(yīng)聘 求職 面試準(zhǔn)備資料)_第3頁
2022年華為軟件工程師面試題(應(yīng)聘 求職 面試準(zhǔn)備資料)_第4頁
2022年華為軟件工程師面試題(應(yīng)聘 求職 面試準(zhǔn)備資料)_第5頁
已閱讀5頁,還剩13頁未讀, 繼續(xù)免費閱讀

下載本文檔

版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報或認(rèn)領(lǐng)

文檔簡介

2022年華為軟件工程師面試題

第1題:

寫一個程序,要求功能:求出用1,2,5這三個數(shù)不同個數(shù)組合的

和為100的組合個數(shù)。

如:100個1是一個組合,5個1加19個5是一個組合。。。。請用

C++語言寫。

最簡單想到的算法是:

設(shè)x是1的個數(shù),y是2的個數(shù),z是5的個數(shù),number是組合數(shù)

留意到0=x=100,0=y=50,0=z=20,所以可以編程為:

number=0;

for(x=0;x=100;x++)

for(y=0;y=50;y++)

for(z=0;z=20;z++)

if((x+2*y+5*z)==100)

number++;

coutnumberendl;

上面這個程序一共要循環(huán)100*50*20次,效率實在是太低了

事實上,這個題目是一道明顯的數(shù)學(xué)問題,而不是單純的編程問題。

—1—

我的解法如下:

由于x+2y+5z=100

所以x+2y=100-5z,且z=20x=100y=50

所以(x+2y)=100,且(x+5z)是偶數(shù)

對z作循環(huán),求x的可能值如下:

z=0,x=100,98,96,...0

z=l,x=95,93,...,l

z=2,x=90,88,...,0

z=3,x=85,83,...,l

z=4,x=80,78,...z0

z=19,x=5,3,l

z=20,x=0

因此,組合總數(shù)為100以內(nèi)的偶數(shù)+95以內(nèi)的奇數(shù)+90以內(nèi)的偶數(shù)

+...+5以內(nèi)的奇數(shù)+1,

即為:

(51+48)+(46+43)+(41+38)+(36+33)+(31+28)+(26+23)+(21+18)+(16+13)+(

11+8)+(6+3)+1

一2一

某個偶數(shù)m以內(nèi)的偶數(shù)個數(shù)(包括0)可以表示為m/2+l=(m+2)/2

某個奇數(shù)m以內(nèi)的奇數(shù)個數(shù)也可以表示為(m+2)/2

所以,求總的組合次數(shù)可以編程為:

number=0;

for(intm=0;m=100;m+=5)

(

number+=(m+2)/2;

}

coutnumberendl;

這個程序,只需要循環(huán)21次,兩個變量,就可以得到答案,比上面的

那個程序高效了很多

倍--只是由于作了一些簡潔的數(shù)學(xué)分析

這再一次證明白:計算機(jī)程序=數(shù)據(jù)結(jié)構(gòu)+算法,而且算法是程序的

靈魂,對任何工程問

題,當(dāng)用軟件來實現(xiàn)時,必需選取滿意當(dāng)前的資源限制,用戶需求

限制,開發(fā)時間限制等種

種限制條件下的最優(yōu)算法。而絕不能一拿到手,就立即用最簡單想

到的算法編出一個程序了

事一一這不是一個專業(yè)的研發(fā)人員的行為。

一3一

那么,那種最簡單想到的算法就完全沒有用嗎?不,這種算法正好

可以用來驗證新算法

的正確性,在調(diào)試階段,這特別有用。在許多大公司,例如微軟,

都采納了這種方法:在調(diào)

試階段,對一些重要的需要好的算法來實現(xiàn)的程序,而這種好的算

法又比較簡單時,同時用

簡單想到的算法來驗證這段程序,假如兩種算法得出的結(jié)果不全都

(而最簡單想到的算法保

證是正確的),那么說明優(yōu)化的算法出了問題,需要修改。

可以舉例表示為:

#ifdefDEBUG

intsimple();

#endif

intoptimize();

inafunction:

(

result=optimize();

ASSERT(result==simple());

)

這樣,在調(diào)試階段,假如簡潔算法和優(yōu)化算法的結(jié)果不全都,就會打

-4-

出斷言。同時一,在程

序的發(fā)布版本,卻不會包含笨重的simple。函數(shù)。一一任何大型工

程軟件都需要預(yù)先設(shè)計良

好的調(diào)試手段,而這里提到的就是一種有用的方法。

第2題:

一個同學(xué)的信息是:姓名,學(xué)號,性別,年齡等信息,用一個鏈表,

把這些同學(xué)信息連在一起,給出一個age,在些鏈表中刪除同學(xué)年齡等

于age的同學(xué)信息。

#include"stdio.h"

#include"conio.h"

structstu{

charname[20];

charsex;

intno;

intage;

structstu*next;

-5-

}*linklist;

structstu*creatlist(intn)

(

inti;

〃h為頭結(jié)點,p為前一結(jié)點,s為當(dāng)前結(jié)點

structstu*h/*p,*s;

h=(structstu*)malloc(sizeof(structstu));

h-next=NULL;

P=h;

for(i=0;in;i++)

(

s=(structstu*)malloc(sizeof(structstu));

p-next=s;

printf("Pleaseinputtheinformationofthestudent:namesexnoage\n");

scanf("%s%c%d%d",s-name/s-sex/s-no,s-age);

s-next=NULL;

P=s;

}

printf("Createsuccessful!");

return(h);

)

voiddeletelist(structstu*s,inta)

-6-

structstu*p;

while(s-age!=a)

(

P=s;

s=s-next;

}

if(s==NULL)

printf("Therecordisnotexist.");

else

(

p-next=s-next;

printf("Deletesuccessful!");

}

}

voiddisplay(structstu*s)

(

s=s-next;

while(s!=NULL)

(

printf("%s%c%d%d\n"/s-name/s-sex,s-no/s-age);

s=s-next;

-7-

}

}

intmain()

(

structstu*s;

intn,age;

printf("Pleaseinputthelengthofseqlist:\n");

scanf("%d",n);

s=creatlist(n);

display(s);

printf("Pleaseinputtheage:\n");

scanf("%d",age);

deletelist(s,age);

display(s);

returnO;

}

第3題:

實現(xiàn)一個函數(shù),把一個字符串中的字符從小寫轉(zhuǎn)為大寫。

—8—

#include"stdio.h"

#include"conio.h"

voiduppers(char*s,char*us)

(

for(;*s!='\0';s++,us++)

(

if(*s='a'*s='z')

*us=*s-32;

else

*us=*s;

)

*us='\O';

}

intmain()

(

char*s,*us;

charss[20];

printf("Pleaseinputastring:\n");

scanf("%s",ss);

s=ss;

-9-

uppers(s,us);

printf("Theresultis:\n%s\n"/us);

getch();

}

第4題:

隨機(jī)輸入一個數(shù),推斷它是不是對稱數(shù)(回文數(shù))(如3,121,12321,

45254)。不能用字符串庫函數(shù)

1.

函數(shù)名稱:Symmetry

功能:推斷一個數(shù)時候為回文數(shù)(121,35653)

輸入:長整型的數(shù)

輸出:若為回文數(shù)返回值為lesleO

*******/

unsignedcharSymmetry(longn)

-10-

longi.temp;

i=n;temp=0;

while(i)〃不用消失長度問題,將數(shù)按凹凸位掉換

(

temp=temp*10+i%10;

i/=10;

}

return(temp==n);

}

方法一

功能:

推斷字符串是否為回文數(shù)字

實現(xiàn):

先將字符串轉(zhuǎn)換為正整數(shù),再將正整數(shù)逆序組合為新的正整數(shù),兩

數(shù)相同則為回文數(shù)字

輸入:

char*s:待推斷的字符串

輸出:

返回:

0:正確;1:待推斷的字符串為空;2:待推斷的字符串不為數(shù)字;

—11-

3:字符串不為回文數(shù)字;4:待推斷的字符串溢出

*/

unsignedlsSymmetry(char*s)

(

char*p=s;

longnNumber=0;

longn=0;

longnTemp=0;

/*推斷輸入是否為空*/

if(*s==\'\\O\')

returnl;

/*將字符串轉(zhuǎn)換為正整數(shù)*/

while(*p!=\'\\O\')

(

/*推斷字符是否為數(shù)字*/

if(*p\,0\'||*p\'9\')

return2;

/*推斷正整數(shù)是否溢出*/

if((*p-\'0\')(4294967295-(nNumber*10)))

-12-

return4;

nNumber=(*p-\'0\')+(nNumber*10);

P++;

}

/*將數(shù)字逆序組合,直接抄樓上高手的代碼,莫怪,呵呵*/

n=nNumber;

while(n)

(

/*推斷正整數(shù)是否溢出*/

if((n%10)(4294967295-(nTemp*10)))

return3;

nTemp=nTemp*10+n%10;

n/=10;

}

/*比較逆序數(shù)和原序數(shù)是否相等*/

if(nNumber!=nTemp)

return3;

-13-

returnO;

}

方法二

功能:

推斷字符串是否為回文數(shù)字

實現(xiàn):

先得到字符串的長度,再依次比較字符串的對應(yīng)位字符是否相同

輸入:

char*s:待推斷的字符串

輸出:

返回:

0:正確;1:待推斷的字符串為空;2:待推斷的字符串不為數(shù)字;

3:字符串不為回文數(shù)字

7

unsignedlsSymmetry_2(char*s)

(

char*p=s;

intnLen=O;

-14-

inti=O;

/*推斷輸入是否為空*/

if(*s==\'\\O\')

returnl;

/*得到字符串長度*/

while(*p!=\'\\O\')

(

/*推斷字符是否為數(shù)字*/

if(*p\,0\'||*p\'9\')

return2;

nLen++;

P++;

}

/*長度不為奇數(shù),不為回文數(shù)字*/

if(nLen%2==0)

return4;

/*長度為1,即為回文數(shù)字*/

—15-

if(nLen==l)

returnO;

/*依次比較對應(yīng)字符是否相同*/

p=s;

i=nLen/2-l;

while(i)

(

if(*(p+i)!=*(p+nLen-i-l))

return3;

i-;

)

returnO;

}

第5題:

求2~2000的全部素數(shù).有足夠的內(nèi)存,要求盡量快

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論