华为上机题汇总111题

合集下载

华为校园招聘软件研发上机测试题及部分解答+

华为校园招聘软件研发上机测试题及部分解答+

以下是收集到的两套题(没有添加答案),上机测试只有应聘软件研发的才会碰到。

有的写了点自己的解法,如果大家有好的想法欢迎讨论!大家一起学习嘛!以下是上机考试的一些注意事项:(1)考试时长为2个小时,总共有3个题(去年是2个题,难度要比今年大些),编译环境为VC 6.0(C语言)/ Eclipse(Java);(2)3个题目中大致第一个题是最简单的,第三个题是最难的;(3)从服务器上下载题目下来后最好能把工程保存到在电脑重启后不会自动还原的磁盘分区下面,这样不致由于各种意外因素电脑重启过后编的程序不会消失;(4)不要改动所给函数的原型,可以自己添加函数。

另外,华为提供的工程是将Main函数隐藏了的,所以自己不用再添加Main函数。

试题1:2011.9.6 转载自:/liuqiqi677/article/details/67554981、选秀节目打分,分为专家评委和大众评委,score[] 数组里面存储每个评委打的分数,judge_type[] 里存储与score[] 数组对应的评委类别,judge_type[i] == 1,表示专家评委,judge_type[i] == 2,表示大众评委,n表示评委总数。

打分规则如下:专家评委和大众评委的分数先分别取一个平均分(平均分取整),然后,总分= 专家评委平均分* 0.6 + 大众评委* 0.4,总分取整。

如果没有大众评委,则总分= 专家评委平均分,总分取整。

函数最终返回选手得分。

函数接口int cal_score(int score[], int judge_type[], int n)(这个问题很简单,应该只是涉及了下double/int转换)2、给定一个数组input[] ,如果数组长度n为奇数,则将数组中最大的元素放到output[] 数组最中间的位置,如果数组长度n为偶数,则将数组中最大的元素放到output[] 数组中间两个位置偏右的那个位置上,然后再按从大到小的顺序,依次在第一个位置的两边,按照一左一右的顺序,依次存放剩下的数。

华为机考题目及答案

华为机考题目及答案

华为机考题目及答案1.删除字符串中所有给定的子串(40分)问题描述:在给定字符串中查找所有特定子串并删除,如果没有找到相应子串,则不作任何操作。

要求实现函数:int delete_sub_str(const char *str, const char *sub_str, char *result_str)【输入】:str(输入的被操作字符串)、sub_str(需要查找并删除的特定子字符串)【输出】:result_str(在str字符串中删除所有sub_str子字符串后的结果)【返回】:删除的子字符串的个数注:I、子串匹配只考虑最左匹配情况,即只需要从左到右进行字串匹配的情况。

比如:在字符串"abababab"中,采用最左匹配子串"aba",可以匹配2个"aba"字串。

如果匹配出从左到右位置2开始的"aba",则不是最左匹配,且只能匹配出1个"aba"字串。

II、输入字符串不会超过100 Bytes,请不用考虑超长字符串的情况。

示例输入:str = "abcde123abcd123"sub_str = "123"输出:result_str = "abcdeabcd"返回:2输入:str = "abcde123abcd123"sub_str = "1234"输出:result_str = "abcde123abcd123"返回:0我的答案:#include#includeint delete_sub_str(const char *str, const char *sub_str, char *result_str);int main(int argc, char *argv[]){char *st = "12fuck345fuck678fuck9";char *sub = "fuck3";char res[50] ="";int count = delete_sub_str(st, sub, res);printf("子字符串的个数是:%d\n", count);printf("删除子字符串后:\n%s\n", res);return 0;}int delete_sub_str(const char *str, const char *sub_str, char *result_str){int num = 0;int i = 0;int j = 0;int k = 0;int index = 0;for(i = 0; str[i] != '\0'; i++){index = i;j = 0;while(str[i] != '\0' && sub_str[j] != '\0' && str[i] == sub_str[j]) {i++;j++;}if(sub_str[j] != '\0'){i = index;result_str[k] = str[i];k++;}else{num++;i--;}}return num;}2.大数加减问题描述:在计算机中,由于处理器位宽限制,只能处理有限精度的十进制整数加减法,比如在32位宽处理器计算机中,参与运算的操作数和结果必须在-231~231-1之间。

华为电子材料上机考试笔试题目20200001

华为电子材料上机考试笔试题目20200001

单选题(2分/题,合计40题)1.不易与胶粘剂形成化学键粘结的是A.PTFEB.PCC.PAD.PBT2.金属冷却结晶时A.理论结晶温度大于实际结晶温度B.理论结晶温度小于实际结晶温度C.理论结晶温度和实际结晶温度没关系3.逆扩散现象A.二次结晶B.晶界杂质聚集C.布朗运动4.以下非纳米材料特有的性质是:DA.量子隧穿效应B.表面效应C.小尺寸效应D.柯肯达尔效应E.量子限域效应5.Fe焊缝晶体形态主要是柱状晶和等轴晶:AA.正确B.错误6.固体表面能越大,液体越容易润湿:BA.正确B.错误7.以下属于物理键的是:BB.范德华力C.离子键D.共价键8.交变荷载作用下,抵抗破坏能力的概念A.疲劳强度C. 硬度9. 陶瓷材料晶体结构分析的手段A. XRDB.10. 以下不属于位错的是A. 孳晶B. 多晶C. 空位D.11. 大角度品界定义A. > 5~10。

B. > 10^15°C. > 20^30°D. > 30^40°12.为什么没有纯的二氧化钛陶瓷难烧结13.使用DSC、TMA、DMA测试材料的Tg点相差不超过2度正确or错误14.相图表示()下材料的相状态与温度、成分之间的关系A.常压B.平衡C.15.范特荷夫规则,纯固相反应,其过程是A.放热反应B.吸热反应C.等温16.沉淀的生成、溶解和转化的条件是什么17.多选题(4分/题,合计5题)1.请问润湿角满足什么条件,被视作疏水:(CDE)A. > 30°B. > 60°C. > 90°D. >120° E. > 150°2.材料的磁性按照磁化程度分类:(ABCDE)A.顺磁性B.抗磁性C.铁磁性D.亚铁磁性E.反磁性3.材料结晶的必要条件:(ABCD)A.过冷;B.结构起伏;C.能量起伏;D.成分起伏(合金)4.细化材料铸态晶粒的措施:(ABC)A.提高过冷度B.变质处理C.振动与搅拌D.提咼温度判断1、Fe-C相图’Fe3C是最稳定的富碳相。

华为机试题目总结(程序篇)

华为机试题目总结(程序篇)

华为机试题目总结(程序篇)自己写的,水平很挫,仅供参考目录1.语言识别问题2.销售网络问题(未完成)3.股票投资问题4.判断手机号码合法性5.元音字母复制6.验证身份证号7.选秀节目打分8.数组最大值放中间,其他依次放其左右(规律未找着,未完成)9.任务调度(解题关键,需要一个容器来承载下标跟值的一一对应关系,最好就是定义一个结构体)10.将某字符变成小写后的某个字符11.链表的逆序12.单词统计13.字符串进行转换,转换成相应的数字已知:yi er san si wu liu qi ba jiu 分别对应,对一段只含有这几种字符的字符串进行转换,转换成相应的数字14.一个数组中比平均数大的个数15.求一个数组中第一大和第二大数16.字符变成整数17.整数变字符18.判断素数问题19(1).约瑟夫环(循环列表)19(2).约瑟夫环(数学方法只能求出最后的胜利者的序号)19(3).约瑟夫环(容器实现)20.判断某个整数是回文。

即这样的,反过来还是21.判断一个字符串是不是回文22.求一个字符串中的最大回文子串,就是从n个字符开始检查是不是回文,知道m个字符符合回文,那么这个就是最大回文23.找出^n的数24.统计一个数二进制表达中的个数25.镜像反转二进制表达式,并输出十进制值26.连续字符统计27.判断一个字符串中()是否配对28.查找子字符串个数29(1).找出一个字符串中是否包含相同(包括连续的)的子字符串(要求子串长度大于等于)并输出出现频率最高的子字符串29(2)找出一个字符串中是否包含连续相同的子字符串,并输出出现频率最高的子字符串30.删除字符窜中字符数最少的字符31.关于数组的循环移位,左移为负,右移为正32.求一个二维数组每列的最小值33.两个字符串,求最长公共子串34.超大整数加法运算,大整数会用字符串或者数组来存,不过注意低位存字符前面几位,高位存后面,存到字符中应该存“”。

华为校园招聘上机笔试题

华为校园招聘上机笔试题

华为校园招聘上机笔试题华为校园招聘上机笔试题上机时间两小时,3道题1 字串转换问题描述:将输入的字符串(字符串仅包含小写字母‘a’到‘z’),按照如下规则,循环转换后输出:a->b,b->c,…,y->z,z->a;若输入的字符串连续出现两个字母相同时,后一个字母需要连续转换2次。

例如:aa 转换为 bc,zz 转换为 ab;当连续相同字母超过两个时,第三个出现的字母按第一次出现算。

要求实现函数:void convert(char *input,char* output)【输入】 char *input , 输入的字符串【输出】 char *output ,输出的`字符串【返回】无示例输入:char*input="abcd"输出:char*output="bcde"输入:char*input="abbbcd"输出:char*output="bcdcde"void convert(char *input,char *output){char c='\0';int tag=0;int len=strlen(input);for(int i=0;i{if(input[i]!=c)//当前字符与前一个字符不相等,则该字符+1{output[i]=(input[i]-'a'+1)%26+'a';c=input[i];tag=1;}else{if(tag==1)//当前字符与前一个字符相等,且前面只有一个字符相同{output[i]=(input[i]-'a'+2)%26+'a';c='\0';tag=0;}else//当前字符与前一个字符相等,且前面已有2n个字符相同。

则按第一次出现算{output[i]=(input[i]-'a'+1)%26+'a';c=output[i];tag=1;}}}}void convert(char *input,char *output){char c='\0';int tag=0;int len=strlen(input);for(int i=0;i{if(input[i]!=c)//当前字符与前一个字符不相等,则该字符+1{output[i]=(input[i]-'a'+1)%26+'a';c=input[i];tag=1;}else{if(tag==1)//当前字符与前一个字符相等,且前面只有一个字符相同{output[i]=(input[i]-'a'+2)%26+'a';c='\0';tag=0;}else//当前字符与前一个字符相等,且前面已有2n个字符相同。

华为机考题

华为机考题

销售网络问题时间限制(普通/Java):1000MS/3000MS 运行内存限制:65536KByte问题描述华为公司积极开拓北美市场,首先在北美建立销售总部,总部在附近地区发展一些销售点,这些销售点可以发展建立下一级销售点,依此类推,最终形成一个新型分级销售网络。

假设在销售网络中,有N个销售点(包括总部),将它们分别编号为1至N。

考虑到金融危机,销售总部决定撤销一些销售点,保留其他销售点。

需要注意是:(1)如果撤销一个销售点,那么该销售点发展的所有下级销售点均要撤销,依此类推;(2)销售总部不能撤销自己;(3)销售总部可以不撤销任何销售点。

请你帮忙告诉华为公司:共存在多少个销售点撤销方案。

问题输入输入包括多个行,首先给出一个整数N,接着N-1行给出销售网络的建立过程,在这N-1行中,第j行(1≤j≤N-1)给出一个整数k(i<k),表示销售点k发展了销售点j。

销售点N就是销售总部。

问题输出输出一行,给出销售点撤销方案数。

样例输入323样例输出3提示:样例有3个销售点(包括总部),“销售点2”发展了“销售点1”,“销售点3”发展了“销售点2”,根据描述,有以下3种销售点撤销方案:(1)不撤销任何销售点;(2)撤销“销售点1”;(3)撤销“销售点1”、“销售点2”。

语言识别问题时间限制(普通/Java):10000MS/30000MS 运行内存限制:65536KByte问题描述给你一段英文或德文文字,你能编程识别它可能是哪种语言吗?研究发现,统计文字中字母“t”(或“T”)与“s”(或“S”)出现的次数,如果给定文字中“t”(或“T”)的出现次数比“s”(或“S”)多,则可能为英文,否则可能为德文。

问题输入输入包括多个行数,首先给出整数N(1<N<10000),接着给出N行文字,每一行文字至少包括一个字符,至多100个字符。

问题输出输出包括一行,如果输入文字可能为英文,则输出English,否则输出Deutsch。

最全华为上机试题及部分答案

最全华为上机试题及部分答案

2011年华为软件校园招聘编程测验1、请上机编写程序,按题目要求提交文件。

[详见考试说明,点击进入考试说明]3、评卷通过在给定用例输入下,严格按照试题要求比较考生实现函数的输出与预设输出。

两者相同则得分,不同则不得分。

4、评卷人保证测试用例输入参数的合法性,考生不用考虑输入参数非法或异常的情况5、评卷人保证测试用例输入在被测函数正常合法情况下使用不会导致程序错误6、如果考生函数异常导致程序崩溃或死循环,则自动评卷可能会被人为终止,剩余用例不被执行,无法得分7、基于上述阅卷规则,请考生严格按照题目要求功能实现程序,尽量保证实现函数的稳健性,同时建议完成一道题并调试保证正确性后,再考虑并实现下一题目(17)1,判断电话号码是否合法://要注意情况包含,有可能会同时出现几种不好的情况,要按照顺序输出错误。

不能同时输出好几种错误,应该是这样包含:先判断长度是否符合,再判断是否以86打头,再判断有无其他字符int fun(char num[]){ char *p=num;int n=strlen(num);if(n==13){if(*p=='8'&&*(p+1)=='6')while(*p!='\0'){if(*p>='0'&&*p<='9')p++;elsereturn 2;if(*p=='\0')return 0;}else return 3;}elsereturn 1;}int main(){char num[]="87139a3887671";int k=fun(num);cout<<k<<endl;return 0;}(18) 数组比较(20分)•问题描述:比较两个数组,要求从数组最后一个元素开始逐个元素向前比较,如果2个数组长度不等,则只比较较短长度数组个数元素。

华为上机考试题

华为上机考试题

华为上机考试题2016年华为上机考试题本文为大家分享的是2016最新的华为认证上机模拟考试题,希望对大家的复习有所帮助!1 (1) 字母大小写反转这到题没什么可说的,只是我很久没写这样要IO输入输出的代码,当时看到华为的提示纸条上写着“只能使用stdin方式输入”,还愣了一会:一定是我打开方式不对,什么时候有了一个stdin的输入函数?难道我又学艺不精了……后面才反应过来,直接按英文字面意思理解为“只能使用标准输入方式”就好了。

好了,言归正传,回到这道题,至少可以用以下两种方式:C++ STL库string中有isupper ,islower ,toupper ,tolower 函数通过 +/- ('a'-'A'+0)(2) n个人围成一圈,从第1个人开始报数,每报到第m个人,则其出局,求最后出局的人的初始序号。

第1种方法,我当时是用了个状态表来记录这人有没有出局,没出局则报数计数器加1并玩下走,碰到第m个报数号则更新状态为已出局,碰到队伍最末则重新移动到队首。

#include#define N 4#define M 3using namespace std;int *man = NULL;int JosephusSol_statusTab(int n,int m){int sn=0 , pos = 0 ,loop_pos=0;do{if( man[pos] == 0 ){//此人未出局loop_pos++;if(loop_pos == m){//找到一轮报数的出局者sn++;man[pos] = sn ; // 标记出局序号loop_pos = 0;}}pos ++ ;if(pos==n)pos = 0;}while(sn!=n);return pos;}int main(){int sn=0 , pos = 0 ,loop_pos=0;man = new int [N];for(int i=0;iman[i] = 0;pos = JosephusSol_statusTab(N,M);cout << pos <if(man != 0)delete [] man;return 0;}第2种方法是双向链表,技术面面试的时候,面试官就考了我这一题,在纸上快速写代码的能力还是有所欠缺。

华为机试题目

华为机试题目

华为机试题目字符串通配查找描述: 请用程序实现带有通配符(?与*)的字符串匹配功能。

代表单个字符,*代表任意个(0或多个)字符运行时间限制: 无限制内存限制: 无限制输入: 带有通配符的模式串和目标串,长度均不超过20。

模式串在前,目标串在后。

输出: 输出第一个匹配位置的下标值(字符串起始开始就匹配上的值为0),若没有匹配的位置则输出-1样例输入: ?^_^*abc^_^abc样例输出: 2答案提示: 2/** 封装PPP数据包描述: 计算机通信中会使用多种协议,TCP/IP协议族是最常见的一组,其中有一个链路层协议叫PPP协议,也称点到点协议,比如家庭使用的ADSL拨号链路层使用的就是PPP协议,底层使用是以太网协议,也称PPPOE。

PPP协议也规定了自己的组包方式,也就是上层协议的数据,抵达PPP层时,会再次添加包头和包尾,继而传输到更底层的协议。

下面介绍下PPP协议打包的基本规则,根据该规则,按照要求读取原始数据,组包成PPP规定的新数据。

PPP数据包格式简介:-------------------------------------------------------------|标志 | 地址 | 控制 | 协议 | 信息 | CRC校验 | 标志|------------------------------------------------------------1字节 1字节 1字节 2字节 N字节 2字节 1字节标志:PPP包的开头和结尾,1字节长度,固定为0x7e地址:1字节,固定为0xff控制:1字节,固定为0x03协议:2字节,本题目有3组值:0xc021(LCP) , 0xc023(PAP), 0x8021(IPCP)信息:字节数不定,为上层协议的数据CRC校验:2字节,本题目中不进行计算,默认填充为0xffff由于标志字符的值是0x7e,因此当该字符出现在信息字段中时,PPP需要对它进行转义。

华为笔试题大全(史上最齐全)

华为笔试题大全(史上最齐全)

华为1.static有什么用途?(请至少说明两种)1)在函数体,一个被声明为静态的变量在这一函数被调用过程中维持其值不变。

2) 在模块内(但在函数体外),一个被声明为静态的变量可以被模块内所用函数访问,但不能被模块外其它函数访问。

它是一个本地的全局变量。

3) 在模块内,一个被声明为静态的函数只可被这一模块内的其它函数调用。

那就是,这个函数被限制在声明它的模块的本地范围内使用2.引用与指针有什么区别?1) 引用必须被初始化,指针不必。

2) 引用初始化以后不能被改变,指针可以改变所指的对象。

3) 不存在指向空值的引用,但是存在指向空值的指针。

3.描述实时系统的基本特性在特定时间内完成特定的任务,实时性与可靠性。

4.全局变量和局部变量在内存中是否有区别?如果有,是什么区别?全局变量储存在静态数据库,局部变量在堆栈。

5.什么是平衡二叉树?左右子树都是平衡二叉树且左右子树的深度差值的绝对值不大于1。

6.堆栈溢出一般是由什么原因导致的?没有回收垃圾资源。

7.什么函数不能声明为虚函数?constructor函数不能声明为虚函数。

8.冒泡排序算法的时间复杂度是什么?时间复杂度是O(n^2)。

9.写出float x 与“零值”比较的if语句。

if(x>0.000001&&x<-0.000001)10.Internet采用哪种网络协议?该协议的主要层次结构?Tcp/Ip协议主要层次结构为:应用层/传输层/网络层/数据链路层/物理层。

11.Internet物理地址和IP地址转换采用什么协议?ARP (Address Resolution Protocol)(地址解析协议)12.IP地址的编码分为哪俩部分?IP地址由两部分组成,网络号和主机号。

不过是要和“子网掩码”按位与上之后才能区分哪些是网络位哪些是主机位。

13.用户输入M,N值,从1至N开始顺序循环数数,每数到M输出该数值,直至全部输出。

华为上机题整理大全及答案解析

华为上机题整理大全及答案解析

1、数组中最大数与最小数之和 (4)2、两个长整型的和 (5)3、删除串中重复出现的字符 (6)4、将串中重复出现的字符进行压缩 (8)5、操作数1 运算符操作数2 (9)6、约瑟夫环问题 (11)7、去掉数字串中的最大数和最小数 (13)8、身高差值最小的两个身高 (14)9、删除子串 (15)10. 实现高精度的十进制加法 (17)11、10个学生及格线 (23)12、亮着的电灯数 (24)14、字符串按照特殊规则转换 (25)15、字符串中查找单词 (27)16、数组中不同的一个数 (28)17、数组中不同的两个数 (29)18、链表以k翻转 (31)19、链表相邻元素翻转 (34)20、字符串中小括号中括号匹配 (36)21、一行数字中找子数 (38)22、字符串M化成以N为单位的段 (40)23将电话号码 one two 。

nine zero (41)24.将整数倒序输出 (44)25、括号匹配 (46)26约瑟夫问题 (47)27.统计数字出现的次数,最大次数的统计出来 (48)28. .字符串首字母转换成大写 (50)29. 子串分离 (50)29. 子串分离题目描述:通过键盘输入任意一个字符串序列,字符串可能包含多个子串,子串以空格分隔。

请编写一个程序,自动分离出各个子串,并使用’,’将其分隔,并且在最后也补充一个’,’并将子串存储。

如果输入“abc def gh i d”,结果将是abc,def,gh,i,d,要求实现函数:void DivideString(const char *pInputStr, long lInputLen, char *pOutputStr); 【输入】 pInputStr:输入字符串lInputLen:输入字符串长度【输出】 pOutputStr:输出字符串,空间已经开辟好,与输入字符串等长;方法一:void DivideString(char*pInputStr,long iInputLen,char*pOutputStr){int cnt;while(*pInputStr!='\0')//用空来判断串结束,并没有用到串长{if(*pInputStr!=' '){cnt=0;*pOutputStr++=*pInputStr++;}else{cnt++;if(cnt==1)//用cnt来实现两个单词之间有多个空格时也只替换一个空格为, *pOutputStr++=',';pInputStr++;}}*pOutputStr++=',';*pOutputStr='\0';}方法二:void DivideString(char*pInputStr,long iInputLen,char*pOutputStr){int i,cnt=0,k=0;For(i=0;pInputStr[i]!=’’;i++);//不要忘了把串首的空格给剔除for(i<iInputLen;i++)//利用长度这个参数,i指示输入指针{if(pInputStr[i]!=' '){cnt=0;pOutputStr[k++]=pInputStr[i];//k指示输出指针,与i的增加并非同步}else{cnt++;if(cnt==1)pOutputStr[k++]=',';}}pOutputStr[k++]=',';pOutputStr[k]='\0';}void main(){char *a="I am a good boy";char*b=(char*)malloc(strlen(a)+1);//应该加2吧,末尾要存放一个,一个串结束标识符DivideString(a,strlen(a),b);printf("%s\n",b);}27.统计数字出现的次数,最大次数的统计出来输入:323324423343输出:3,6#include <stdio.h>#include <string.h>int main(){char *pInputStr="2343545466666789";int hash[10]={0};int max,max_n,i;//统计次数for(i=0;i<strlen(pInputStr);i++)hash[pInputStr[i]-'0']++;//串转化为数字//寻找最大的次数max=hash[0];for(i=0;i<10;i++){if(hash[i]!=0)//有些数字的出现次数可能为0,使用此句可以避免下面的比较{if(hash[i]>max)//等价语句:max=max>hash[i]?max,hah[i];{max=hash[i];max_n=i;}printf("the number %d 出现%d次\n",i,hash[i]);}}printf("数字%d出现次数最多:%d\n",max_n,max);return 0;}28. .字符串首字母转换成大写举例:输入:this is a book返回:This Is A Book#include <stdio.h>int main(){char a[]="i am is a boy";int i;//int n=strlen(a);char b[256]={0};for(i=0;i<strlen(a);i++){if(a[i]==' ')a[i+1]=a[i+1]-32;b[i]=a[i];}b[0]=a[0]-32;printf("原串为:%s\n",a);printf("新串为:%s\n",b);return 0;}1、数组中最大数与最小数之和1.第一题的题目大概是输入整型数组求数组的最小数和最大数之和,例如输入1,2,3,4则输出为5,当输入只有一个数的时候,则最小数和最大数都是该数,例如只输入1,则输出为2;另外数组的长度不超过50#include<stdio.h>main(){int num[50]={0};int i,n;printf("请输入整型数组的长度(1~50):");scanf("%d",&n);printf("请输入整型数组的元素:");for (i=0;i<n;i++){scanf("%d",&num[i]);}int min_num=num[0];int max_num=num[0];for(int j=0;j<n;j++){if(max_num<num[j])max_num=num[j];else if(min_num>num[j])min_num=num[j];}int sum=min_num+max_num;printf("数组中最大与最小值之和:%d\n",sum);return 0;}2、两个长整型的和2.求两个长长整型的数据的和并输出,例如输入1233333333333333 。

华为上机笔试题

华为上机笔试题

华为上机笔试题(1)求两个整数的最⼩公倍数#include <iostream>using namespace std;int gcd(int a,int b);//⽤辗转相除法求最⼤公约数int main(){int a,b;cin>>a>>b;int res=a*b/gcd(a,b);cout<<res;}int gcd(int a,int b){return a%b==0?b:gcd(b,a%b);}基本思路就是先⽤辗转相除法求得两个数的最⼤公约数,然后两个数相乘除以最⼤公约数就得到了最⼩公倍数。

(2)不使⽤库函数求⼀个数的⽴⽅根主要有两种思路,⼀种是⽤⼆分法,可令左初值为1,右初值为num,不断⼆分找根;另⼀种是⽤⽜顿迭代法,直接⽤迭代公式求解。

⼆分法代码:#include <algorithm>#include <cmath>#include <stdio.h>using namespace std;int main(){double num; //待处理的数scanf("%f",&num);const double err=0.001; //允许的误差bool done=false;double start=1.0,end=num;double res;while(!done){double mid=(start+end)/2;if(abs(pow(mid,3)-num)<=err){res=mid;done=true;}else if(pow(mid,3)-num>err)end=mid;elsestart=mid;}printf("%.1f",res);return 0;}⽜顿迭代法代码:#include <algorithm>#include <cmath>#include <stdio.h>using namespace std;int main(){double num;scanf("%lf",&num);const double err=0.000001;bool done=false;double xn=1;while(!done){if(abs(pow(xn,3)-num)<=err)done=true;else{xn=2.0/3.0*xn+num/(3*xn*xn);}}printf("%.1f",xn);return 0;}⽜顿迭代公式x_{n+1}=x_n-\frac{f(x_n)}{f^*(x_n)},在本道题中相当于要求f(x)=x^3-num=0的解,所以只需要按照上述迭代公式进⾏求解就可以。

华为机考试题+答案

华为机考试题+答案

1、选秀节目打分,分为专家评委和大众评委,score[] 数组里面存储每个评委打的分数,judge_type[] 里存储与score[] 数组对应的评委类别,judge_type[i] == 1,表示专家评委,judge_type[i] == 2,表示大众评委,n表示评委总数。

打分规则如下:专家评委和大众评委的分数先分别取一个平均分(平均分取整),然后,总分= 专家评委平均分* 0.6 + 大众评委* 0.4,总分取整。

如果没有大众评委,则总分= 专家评委平均分,总分取整。

函数最终返回选手得分。

函数接口int cal_score(int score[], int judge_type[], int n)#include<iostream>int cal_score(int score[], int judge_type[], int n){int i =0;int sum1=0, sum2=0;int count1=0,count2=0;int zhongfen=0;for(i =0; i<n; i++){if(1==judge_type[i]){sum1+=score[i];count1++;}else //if(2==judge_type[i]){sum2+=score[i];count2++;}}if(count2==0){zhongfen = sum1;}else{zhongfen = int ((sum1/count1)*0.6 +(sum2/count2)*0.4);}return zhongfen;}int main(){int score[]={1,1,1,1,1,1};int judge_type[] = {2,2,2,1,2,2};printf("%d", cal_score(score, judge_type, 6) );} 2、给定一个数组input[] ,如果数组长度n为奇数,则将数组中最大的元素放到output[] 数组最中间的位置,如果数组长度n为偶数,则将数组中最大的元素放到output[] 数组中间两个位置偏右的那个位置上,然后再按从大到小的顺序,依次在第一个位置的两边,按照一左一右的顺序,依次存放剩下的数。

华为上机题库整理

华为上机题库整理

华为上机题库整理以前上机考试编程工具为C/C++:VC 6.0;Java:eclipse,这次改成C/C++: VS2005(或VC6.0) Java:JDK1.7。

由于本人以前学C语言花了一些功夫,相对Java用得上手些,备考时用的是C++;临考前一周接到通知,说是要用VS2005,于是下个软件再加上熟悉一下花了半天时间,手忙脚乱了一阵(建议最好用VS,毕竟有的程序在VC上能调通,在VS上可能运行不通过);2、以往的形式是给你个函数模块,函数名已写好,你只要往里面填代码就行了(华为提供的工程是将Main函数隐藏了的,所以自己不用再添加Main函数)例如: 1. 从两个数组的最后一个元素比较两个数组中不同元素的个数,如有array1[5]={77,21,1,3,5}, array2[3]={1,3,5},从array1[4]与array2[2]比较开始,到array1[2]与array[0]比较结束。

这样得出它们不同的元素个数为0,若array1[6]={77,21,1,3,5,7},那么他们不同的元素为3。

函数原型为int compare_array( int len1, int array1[], int len2, int array2[] );其中,len1与len2分别为数组array1[]和array2[]的长度,函数返回值为两个数组不同元素的个数。

这次是随你发挥,可以写子函数,也可以只写个main 函数(当然main函数是必不可少的)。

先在编译环境(即VS2005或JDK1.7)上运行,调通后再复制到考试系统中,检查无误后,点击提交(不过每道题最多只能传五次);.3、以往满分是100分,第一题20分,第二题30分,第三题50分,且前两题为必做题,最后一题作为附加题;现在是满分320(有点像英语四六级改革一样,100分改成710分),第一题60分,第二题100分,第三题160分,且不分什么必做题、附加题,建议拿到题目后最好把题目都浏览一遍,不一定按顺序做,尽会做的先做;有几点需要特别注意:1、一定要按标准输入、输出来编程,且按照考试系统中规定的格式,否则即使从头到尾写的都对,系统将显示格式错误,无法得分;2、最好多试几组测试条例,否则得不全分(本人已经犯过此类失误,希望后人不要重蹈覆辙);3、不要写任何程序提示语句(包括自己人为添加的换行命令),否则该题自动判0分;此外,考试时有不清楚的就问在场的工作人员,不要一个人憋在那里不吭声,浪费的是自己宝贵的时间;个人觉得华为的员工还是挺热心的,我问了不少问题,他们都跟我详细解答的,在此感谢他们的热忱相助。

华为机试题及答案

华为机试题及答案

华为机试题及答案1、通过键盘输入任意一个字符串序列,字符串可能包含多个子串,子串以空格分隔。

请编写一个程序,自动分离出各个子串,并使用’,'将其分隔,并且在最后也补充一个’,’并将子串存储。

测试:输入:“abc def gh i d”输出:“abc,def,gh,i,d,”#include<stdio。

h>#include〈string.h〉void DivideString(const char *pInputStr,long lInputLen,char *pOutputStr){int i=0,j=0;int flag=0;while(pInputStr[i]==’ '){i++;}for(;i<lInputLen;i++){if(pInputStr[i]==' ’){flag=1;continue;}if(flag==1){flag=0;pOutputStr[j++]=',’;}pOutputStr[j++]=pInputStr[i];}pOutputStr[j++]=’,';pOutputStr[j]=’\0’;}int main(){char test[40];char re[40];gets(test);DivideString(test, strlen(test), re);printf("%s”,re);return 0;}2、将输入的字符串(字符串仅包含小写字母‘a'到‘z’),按照如下规则,循环转换后输出:a—>b,b-〉c,…,y—〉z,z-〉a;若输入的字符串连续出现两个字母相同时,后一个字母需要连续转换2次。

例如:aa 转换为bc,zz 转换为ab;当连续相同字母超过两个时,第三个出现的字母按第一次出现算。

测试:输入:char*input="abbbcd” 输出:char*output="bcdcde”#include〈stdio.h>#include<string。

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

注:1.本文代码仅保证在visual studio 2005上运行通过!2.高亮的题目为华为机试第三题左右难度。

3.本文的字符串基本运用C++里的string类,很少使用常规字符数组形式。

4.freopen()为输入重定向,方便测试,具体用法问度娘。

1.给定一个字符串,把字符串内的字母转换成该字母的下一个字母,a换成b,z换成a,Z换成A,如aBf转换成bCg,字符串内的其他字符不改变,给定函数,编写函数void Stringchang(const char*inpu,char*output)其中input是输入字符串,output是输出字符串#include<iostream>#include<cctype>#include<cstring>using namespace std;void stringchang(const char*,char*);int main(){char input[100],output[100];cin.getline(input,100);stringchang(input,output);cout<<output<<endl;return 0;}void stringchang(const char* input,char* output){int m=strlen(input),n=0;for(int i=0;i<m;i++){if(isalpha(input[i])){if(input[i]=='z')output[n++]='a';else if(input[i]=='Z')output[n++]='A';elseoutput[n++]=input[i]+1;}elseoutput[n++]=input[i];}output[n]='\0';}2.求一个整型数字中有没有相同的部分,例如12386123这个整型数字中相同的部分是123,相同的部分至少应该是2位数,如果有相同部分返回1,如果没有则返回0。

方法是先将整型数字转换到数组中,再判断。

函数为int same(int num)其中num是输入的整型数字写的很差,懒得改了,不要看吧!#include<iostream>#include<cstring>using namespace std;int same(int);int main(){int num;cin>>num;int m=same(num);cout<<m<<endl;return 0;}int same(int num){int n[100],n1=0,c=0,i1,j1;while(num>0){n[n1++]=num%10;num/=10;}for(int i=0;i<n1;i++){i1=i;c=0;j1=0;for(int j=0;j<n1;j++){if(n[i1]==n[j]&&i1!=j){c++;j1++if(c>=2)return 1;i1++;}else{c=0;j=j-j1;j1=0;i1=i;}}}return 0;}分别将字符串中的字符转换成整型数字,进行计算后,再转换成字符类型存储起来函数为void mul(char *input1,int n,char *input2, int m,char *output)其中input1和input2是输入,n是input1的长度,n2是input2的长度。

Output是输出#include<iostream>#include<cstring>#include<cmath>using namespace std;void mul(char*,int,char*,int,char*);int main(){char input1[100],input2[100],output[100];cin>>input1>>input2;int n=strlen(input1);int m=strlen(input2);mul(input1,n,input2,m,output);cout<<output<<endl;return 0;}void mul(char* input1,int n,char* input2,int m,char* output){int i1=0,i2=0,p1=n,p2=m,p3=0;for(int i=0;i<n;i++){i1+=(input1[i]-'0')*pow(10.0,--p1);}for(int i=0;i<m;i++){i2+=(input2[i]-'0')*pow(10.0,--p2);}long long ou=i1*i2;if(ou==0){output[0]='0';output[1]='\0';return;}char temp;while(ou>0){output[p3++]=ou%10+'0';ou/=10;}output[p3]='\0';for(int i=0;i<p3/2;i++){temp=output[i];output[i]=output[p3-1-i];output[p3-1-i]=temp;}4.删除子串,只要是原串中有相同的子串就删掉,不管有多少个,返回子串个数。

#include<iostream>#include<string>using namespace std;int deletesub(string &str,const string &sub,int);int main(){string str,sub;getline(cin,str);getline(cin,sub);int n=sub.size();int num=deletesub(str,sub,n);cout<<num<<endl;//cout<<str<<endl; 输出删除后的字符串return 0;}int deletesub(string &str,const string &sub,int n){int m,flag=0,num=0;while(flag==0){m=str.find(sub);if(m<0)return num;else{str.erase(m,n); //删除子串num++;}}}5.约瑟夫环是一个数学的应用问题:已知n个人(以编号1,2,3...n分别表示)围坐在一张圆桌周围。

从编号为k的人开始报数,数到m的那个人出列;他的下一个人又从1开始报数,数到m的那个人又出列;依此规律重复下去,直到圆桌周围的人全部出列。

#include<iostream>using namespace std;struct node{int num;node *next;};node *creat(int n){node *q,*p,*head=NULL;for(int i=1;i<=n;i++){p->num=i;if(head==NULL)head=p;elseq->next=p;q=p;}p->next=head;return p;}int main(){int n,k,m;cin>>n>>k>>m;node *l,*q;l=creat(n);q=l;l=l->next;for(int i=1;i<k;i++){q=l;l=l->next;}while(l->next!=l){for(int i=1;i<m;i++){q=l;l=l->next;}cout<<l->num<<"->";q->next=l->next;delete l;l=q->next;}cout<<l->num<<endl;delete l;return 0;}6.比较一个数组的元素是否为回文数组#include<iostream>#include<string>using namespace std;int main(){string str;int m=str.size();for(int i=0;i<m/2;i++){if(str[i]!=str[m-1-i]){cout<<"NO"<<endl;return 0;}}cout<<"YES"<<endl;return 0;}7.比较两个数组,要求从数组最后一个元素开始逐个元素向前比较,如果2个数组长度不等,则只比较较短长度数组个数元素。

请编程实现上述比较,并返回比较中发现的不相等元素的个数比如:数组{1,3,5}和数组{77,21,1,3,5}按题述要求比较,不相等元素个数为0数组{1,3,5}和数组{77,21,1,3,5,7}按题述要求比较,不相等元素个数为3• 要求实现函数:int array_compare(int len1, int array1[], int len2, int array2[])【输入】 int len1:输入被比较数组1的元素个数;int array1[]:输入被比较数组1;int len2:输入被比较数组2的元素个数;int array2[]:输入被比较数组2;【输出】无【返回】不相等元素的个数,类型为int• 示例1)输入:int array1[] = {1,3,5},int len1 = 3,int array2[] = {77,21,1,3,5},int len2 = 5函数返回:02)输入:int array1[] = {1,3,5},int len1 = 3,int array2[] = {77,21,1,3,5,7},int len2 = 6函数返回:3#include<iostream>#include<string>using namespace std;int array_compare(int,int*,int,int*);int main(){int len1,len2;cin>>len1;int *array1=new int[len1];for(int i=0;i<len1;i++){cin>>array1[i];}cin>>len2;int *array2=new int[len2];{cin>>array2[i];}int m=array_compare(len1,array1,len2,array2);cout<<m<<endl;delete []array1;delete []array2;return 0;}int array_compare(int len1,int* array1,int len2,int* array2){int i=len1-1,j=len2-1,num=0;while(i>=0&&j>=0){if(array1[i]!=array2[j])num++;i--;j--;}return num;}8.约瑟夫环变种:输入一个由随机数组成的数列(数列中每个数均是大于0的整数,长度已知),和初始计数值m。

相关文档
最新文档