欢迎来到天天文库
浏览记录
ID:41976302
大小:77.50 KB
页数:7页
时间:2019-09-05
《华为笔试题和答案》由会员上传分享,免费在线阅读,更多相关内容在工程资料-天天文库。
1、华为笔试题含答案[软件工程题]C++1、写一个程序,要求功能:求出用1,2,5这三个数不同个数组合的和为100的组合个数。如:100个1是一个组合,5个1加19个5是一个组合。。。。请用C++语言写。答案:最容易想到的算法是:设x是1的个数,y是2的个数,z是5的个数‘number是组合数注意到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++;cout<2、dl;上面这个程序一共要循环100*50*20次,效率实在是太低了事实上,这个题目是一道明显的数学问题,而不是单纯的编程问题。我的解法如下:因为x+2y+5z=100所以x+2y二100-5z,且z<=20x<=100y<=50所以(x+2y)〈二100,且(x+5z)是偶数对z作循环,求x的可能值如下:z=0,x二100,9&96,・・・0z=l,x=95,93,…,1z=2,x=90,88,0z二3,x二85,83,…,1z二4,x=80,78,•••,0z=19,x=5,3,1z=20,x=0因此,组合总数为100以内的偶数+95以内的奇数+90以内的偶数+...+5以内3、的奇数+1,即为:(51+48)+(46+43)+(41+38)+(36+33)+(31+28)+(26+23)+(21+18)+(16+13)+(11+8)+(6+3)+1某个偶数m以内的偶数个数(包括0)可以表示为m/2+l二(m+2)/2某个奇数m以内的奇数个数也可以表示为5+2)/2所以,求总的组合次数可以编程为:number二0;for(intm=0;m<=100;m+=5){number+=(m+2)/2;}cout<〈numbcr<4、次证明了:计算机程序二数据结构+算法,而且算法是程序的灵魂,对任何工程问题,当用软件来实现吋,必须选取满足当前的资源限制,用户需求限制,开发时间限制等种种限制条件下的最优算法。而绝不能一拿到手,就立刻用最容易想到的算法编出一个程序了事一一这不是一个专业的研发人员的行为。那么,那种最容易想到的算法就完全没有用吗?不,这种算法正好可以用来验证新算法的正确性,在调试阶段,这非常有用。在很多大公司,例如微软,都采用了这种方法:在调试阶段,对一些重要的需要好的算法来实现的程序,而这种好的算法又比较复杂时,同时用容易想到的算法来验证这段程序,如果两种算法得岀的结果不一致(而最容易想到的算法5、保证是正确的),那么说明优化的算法出了问题,需要修改。可以举例表示为:#ifdcfDEBUGintsimple();Sendifintoptimize();result二optimize();ASSERT(result==simple());}这样,在调试阶段,如果简单算法和优化算法的结果不一致,就会打岀断言。同I]寸,在程序的发布版本,却不会包含笨重的simplcO函数。一一任何大型工程软件都需要预先设计良好的调试手段,而这里提到的就是一种有用的方法。2、实现一个函数,把一个字符串中的字符从小写转为大写。ttinclude^includev6、oiduppers(char*s,char*us){for(;*s!二' ';s++,us++){if(*s>二'a&&*s〈二'z')*us二*s-32;else*us=*s;}*us二, ,;}intmain(){char*s,*us;charss[20];printf(''Pleaseinputastring:rT);scanfss);s=ss;uppers(s,us);printf(^Theresultis:%s,z,us);getchO;}3、随机输入一个数,判断它是不是对称数(回文数)(如3,121,12321,45254)o不能用字符串库函数函数名称7、:Symmetry功能:判断一个数时候为回文数仃21,35653)输入:长整型的数输岀:若为冋文数返冋值为1esle0X8、XXj^Xj^X9、XX10、XXj^X11、XX12、XXj^Xj^X13、XXj^X14、XX15、XX16、XXj^Xj^Xj^X17、XX18、XXj^X19、XX20、XXj^Xj^X21、XX22、XXj^Xj^Xj^Xj^X23、XXj^Xj^X24、XX25、XXj^Xj^X26、XX27、XXj^Xj^XjXj^Xj^Xj^Xj^X28、XXj^X29、XX30、XX31、XX32、XXj^Xj^X33、XX34、XX35、XXj^X36、XXj^Xj^Xj^
2、dl;上面这个程序一共要循环100*50*20次,效率实在是太低了事实上,这个题目是一道明显的数学问题,而不是单纯的编程问题。我的解法如下:因为x+2y+5z=100所以x+2y二100-5z,且z<=20x<=100y<=50所以(x+2y)〈二100,且(x+5z)是偶数对z作循环,求x的可能值如下:z=0,x二100,9&96,・・・0z=l,x=95,93,…,1z=2,x=90,88,0z二3,x二85,83,…,1z二4,x=80,78,•••,0z=19,x=5,3,1z=20,x=0因此,组合总数为100以内的偶数+95以内的奇数+90以内的偶数+...+5以内
3、的奇数+1,即为:(51+48)+(46+43)+(41+38)+(36+33)+(31+28)+(26+23)+(21+18)+(16+13)+(11+8)+(6+3)+1某个偶数m以内的偶数个数(包括0)可以表示为m/2+l二(m+2)/2某个奇数m以内的奇数个数也可以表示为5+2)/2所以,求总的组合次数可以编程为:number二0;for(intm=0;m<=100;m+=5){number+=(m+2)/2;}cout<〈numbcr<4、次证明了:计算机程序二数据结构+算法,而且算法是程序的灵魂,对任何工程问题,当用软件来实现吋,必须选取满足当前的资源限制,用户需求限制,开发时间限制等种种限制条件下的最优算法。而绝不能一拿到手,就立刻用最容易想到的算法编出一个程序了事一一这不是一个专业的研发人员的行为。那么,那种最容易想到的算法就完全没有用吗?不,这种算法正好可以用来验证新算法的正确性,在调试阶段,这非常有用。在很多大公司,例如微软,都采用了这种方法:在调试阶段,对一些重要的需要好的算法来实现的程序,而这种好的算法又比较复杂时,同时用容易想到的算法来验证这段程序,如果两种算法得岀的结果不一致(而最容易想到的算法5、保证是正确的),那么说明优化的算法出了问题,需要修改。可以举例表示为:#ifdcfDEBUGintsimple();Sendifintoptimize();result二optimize();ASSERT(result==simple());}这样,在调试阶段,如果简单算法和优化算法的结果不一致,就会打岀断言。同I]寸,在程序的发布版本,却不会包含笨重的simplcO函数。一一任何大型工程软件都需要预先设计良好的调试手段,而这里提到的就是一种有用的方法。2、实现一个函数,把一个字符串中的字符从小写转为大写。ttinclude^includev6、oiduppers(char*s,char*us){for(;*s!二' ';s++,us++){if(*s>二'a&&*s〈二'z')*us二*s-32;else*us=*s;}*us二, ,;}intmain(){char*s,*us;charss[20];printf(''Pleaseinputastring:rT);scanfss);s=ss;uppers(s,us);printf(^Theresultis:%s,z,us);getchO;}3、随机输入一个数,判断它是不是对称数(回文数)(如3,121,12321,45254)o不能用字符串库函数函数名称7、:Symmetry功能:判断一个数时候为回文数仃21,35653)输入:长整型的数输岀:若为冋文数返冋值为1esle0X8、XXj^Xj^X9、XX10、XXj^X11、XX12、XXj^Xj^X13、XXj^X14、XX15、XX16、XXj^Xj^Xj^X17、XX18、XXj^X19、XX20、XXj^Xj^X21、XX22、XXj^Xj^Xj^Xj^X23、XXj^Xj^X24、XX25、XXj^Xj^X26、XX27、XXj^Xj^XjXj^Xj^Xj^Xj^X28、XXj^X29、XX30、XX31、XX32、XXj^Xj^X33、XX34、XX35、XXj^X36、XXj^Xj^Xj^
4、次证明了:计算机程序二数据结构+算法,而且算法是程序的灵魂,对任何工程问题,当用软件来实现吋,必须选取满足当前的资源限制,用户需求限制,开发时间限制等种种限制条件下的最优算法。而绝不能一拿到手,就立刻用最容易想到的算法编出一个程序了事一一这不是一个专业的研发人员的行为。那么,那种最容易想到的算法就完全没有用吗?不,这种算法正好可以用来验证新算法的正确性,在调试阶段,这非常有用。在很多大公司,例如微软,都采用了这种方法:在调试阶段,对一些重要的需要好的算法来实现的程序,而这种好的算法又比较复杂时,同时用容易想到的算法来验证这段程序,如果两种算法得岀的结果不一致(而最容易想到的算法
5、保证是正确的),那么说明优化的算法出了问题,需要修改。可以举例表示为:#ifdcfDEBUGintsimple();Sendifintoptimize();result二optimize();ASSERT(result==simple());}这样,在调试阶段,如果简单算法和优化算法的结果不一致,就会打岀断言。同I]寸,在程序的发布版本,却不会包含笨重的simplcO函数。一一任何大型工程软件都需要预先设计良好的调试手段,而这里提到的就是一种有用的方法。2、实现一个函数,把一个字符串中的字符从小写转为大写。ttinclude^includev
6、oiduppers(char*s,char*us){for(;*s!二' ';s++,us++){if(*s>二'a&&*s〈二'z')*us二*s-32;else*us=*s;}*us二, ,;}intmain(){char*s,*us;charss[20];printf(''Pleaseinputastring:rT);scanfss);s=ss;uppers(s,us);printf(^Theresultis:%s,z,us);getchO;}3、随机输入一个数,判断它是不是对称数(回文数)(如3,121,12321,45254)o不能用字符串库函数函数名称
7、:Symmetry功能:判断一个数时候为回文数仃21,35653)输入:长整型的数输岀:若为冋文数返冋值为1esle0X
8、XXj^Xj^X
9、XX
10、XXj^X
11、XX
12、XXj^Xj^X
13、XXj^X
14、XX
15、XX
16、XXj^Xj^Xj^X
17、XX
18、XXj^X
19、XX
20、XXj^Xj^X
21、XX
22、XXj^Xj^Xj^Xj^X
23、XXj^Xj^X
24、XX
25、XXj^Xj^X
26、XX
27、XXj^Xj^XjXj^Xj^Xj^Xj^X
28、XXj^X
29、XX
30、XX
31、XX
32、XXj^Xj^X
33、XX
34、XX
35、XXj^X
36、XXj^Xj^Xj^
此文档下载收益归作者所有