2023年华为笔试题库.docx

上传人:说****呢 文档编号:87755535 上传时间:2023-04-17 格式:DOCX 页数:23 大小:18.61KB
返回 下载 相关 举报
2023年华为笔试题库.docx_第1页
第1页 / 共23页
2023年华为笔试题库.docx_第2页
第2页 / 共23页
点击查看更多>>
资源描述

《2023年华为笔试题库.docx》由会员分享,可在线阅读,更多相关《2023年华为笔试题库.docx(23页珍藏版)》请在得力文库 - 分享文档赚钱的网站上搜索。

1、 2023年华为笔试题库2023年华为笔试题库一 1.第一题的题目也许是输入整型数组求数组的最小数和最大数之和,例如输入1,2,3,4则输出为5,当输入只有一个数的时候,则最小数和最大数都是该数,例如只输入1,则输出为2;另外数组的长度不超过50 #include main() intnum50=0; inti,n; printf(请输入整型数组的长度(150):); scanf(%d,n); printf(请输入整型数组的元素:); for(i=0;i scanf(%d,numi); intmin_num=num0; intmax_num=num0; for(intj=0;j if(max_

2、num max_num=numj; elseif(min_numnumj) min_num=numj; intsum=min_num+max_num; printf(数组中最大与最小值之和:%dn,sum); return0; 2.求两个长长整型的数据的和并输出,例如输入1233333333333333。 3111111111111111111111111.。,则输出。 #include #include #include main() char*num1,*num2; /两个长长整型数据 char*sum; / inttemp; int len_num1,len_num2; / 两个长长整型

3、数据的长度 intlen_max,len_min; num1=(char*)malloc(sizeof(char); num2=(char*)malloc(sizeof(char); printf(输入两个长长整型数据:); scanf(%s,num1); printf(输入两个长长整型数据:); scanf(%s,num2); len_num1=strlen(num1); len_num2=strlen(num2); len_max=(len_num1=len_num2)?len_num1:len_num2; len_min=(len_num1=len_num2)?len_num1:len_

4、num2; int len_max1=len_max; sum=(char*)malloc(sizeof(char)*len_max); memset(sum,0x00,len_max+1);/切忌初始化 for(;len_num10len_num20;len_num1-,len_num2-) sumlen_max-=(num1len_num1-1-0)+(num2len_num2-1-0); if(len_num10) sumlen_max-=num1len_num1- 1 -0; len_num1-; if(len_num20) sumlen_max-=num1len_num2- 1-0;

5、 len_num2-; for(intj=len_max1;j=0;j-) /实现进位操作 / temp=sumj-0; if(sumj=10) sumj-1+=sumj/10; sumj%=10; char*outsum=(char*)malloc(sizeof(char)*len_max1); j=0; while(sumj=0) /跳出头部0元素 j+; for(int m=0;m outsumm=sumj+0; outsumm=0; printf(输出两长长整型数据之和:%sn,outsum); return0; 3.通过键盘输入一串小写字母(az)组成的字符串。请编写一个字符串过滤程

6、序,若字符串中消失多个一样的字符,将非首次消失的字符过滤掉。 比方字符串“abacacde”过滤结果为“abcde”。 要求实现函数: void stringFilter(const char *pInputStr,long lInputLen, char *pOutputStr); 【输入】 pInputStr:输入字符串 lInputLen: 输入字符串长度 【输出】 pOutputStr:输出字符串,空间已经开拓好,与输入字符串等长; #include #include #include void stringFilter(const char *p_str, longlen, char

7、 *p_outstr) intarray256=0; const char *tmp = p_str; for(int j=0;j if(arraytmpj=0) *p_outstr+=tmpj; arraytmpj+; *p_outstr= 0; void main() char *str = cccddecc; intlen = strlen(str); char* outstr = (char *)malloc(len*sizeof(char); stringFilter(str,len,outstr); printf(%sn,outstr); free(outstr); outstr=

8、 NULL; 4.通过键盘输入一串小写字母(az)组成的字符串。请编写一个字符串压缩程序,将字符串中连续出席的重复字母进展压缩,并输出压缩后的字符串。 压缩规章: 1. 仅压缩连续重复消失的字符。比方字符串abcbc由于无连续重复字符,压缩后的字符串还是abcbc. 2. 压缩字段的格式为字符重复的次数+字符。例如:字符串xxxyyyyyyz压缩后就成为3x6yz 要求实现函数: void stringZip(const char*pInputStr, long lInputLen, char *pOutputStr); 【输入】 pInputStr: 输入字符串 lInputLen: 输入字

9、符串长度 【输出】 pOutputStr: 输出字符串,空间已经开拓好,与输入字符串等长; #include #include #include void stringZip(const char *p_str, long len,char *p_outstr) intcount=1; for(inti=0;i if(p_stri=p_stri+1) count+; else if(count1) *p_outstr+= count +0; *p_outstr+=p_stri; else *p_outstr+=p_stri; count = 1;/留意其位置 *p_outstr= 0; voi

10、d main() char*str = cccddecc; printf(压缩之前的字符串为:%sn,str); intlen = strlen(str); char* outstr = (char*)malloc(len*sizeof(char); stringZip(str,len,outstr); printf(压缩之后的字符串为:%sn,outstr); free(outstr); outstr= NULL; 5.通过键盘输入100以内正整数的加、减运算式,请编写一个程序输出运算结果字符串。 输入字符串的格式为:“操作数1 运算符 操作数2”,“操作数”与“运算符”之间以一个空格隔开。

11、 补充说明: 1. 操作数为正整数,不需要考虑计算结果溢出的状况。 2. 若输入算式格式错误,输出结果为“0”。 要求实现函数: void arithmetic(const char*pInputStr, long lInputLen, char *pOutputStr); 【输入】 pInputStr: 输入字符串 lInputLen: 输入字符串长度 【输出】 pOutputStr: 输出字符串,空间已经开拓好,与输入字符串等长; #include #include #include void arithmetic(const char *input, longlen, char *out

12、put) chars110; chars210; chars310; intcnt = 0; intlen_input=strlen(input); for(inti=0;i if(inputi=) cnt+; if(cnt!=2) *output+= 0; *output= 0; return; sscanf(input,%s %s %s,s1,s2,s3); if(strlen(s2)!=1|(s20!=+s20!=-) *output+= 0; *output= 0; return; int len_s1=strlen(s1); for(i=0;i if(s1i0|s1i9) *outp

13、ut+= 0; *output= 0; return; intlen_s3=strlen(s3); for(i=0;i if(s3i0|s3i9) *output+= 0; *output= 0; return; int x = atoi(s1); int y = atoi(s3); if(s20=+) intresult = x+y; itoa(result,output,10); elseif(s20=-) intresult = x-y; itoa(result,output,10); else *output+= 0; *output= 0; return; void main() c

14、harstr = 10 - 23; charoutstr10; intlen = strlen(str); arithmetic(str,len,outstr); printf(%sn,str); printf(%sn,outstr); 6.一组人(n个),围成一圈,从某人开头数到第三个的人出列,再接着从下一个人开头数,最终输出最终出列的人 (约瑟夫环是一个数学的应用问题:已知n个人(以编号1,2,3.n分别表示)围坐在一张圆桌四周。从编号为k的人开头报数,数到m的那个人出列;他的下一个人又从1开头报数,数到m的那个人又出列;依此规律重复下去,直到圆桌四周的人全部出列。) #include #

15、include #include #include typedef struct Node intdata; structNode *next; 2023年华为笔试题库二 1. 找错 void test1() char string10; char* str1=0123456789; strcpy(string, str1); 答:外表上并且编译都不会错误。但假如string数组原意表示的是字符串的话,那这个赋值就没有到达意图。最好定义为char string11,这样最终一个元素可以存储字符串结尾符0; void test2() char string10, str110; for(int

16、I=0; I10;I+) str1I =a; strcpy(string, str1); 答:strcpy使用错误,strcpy只有遇到字符串末尾的0才会完毕,而str1并没有结尾标志,导致strcpy函数越界访问,不妨让str19=0,这样就正常了。 void test3(char* str1) char string10; if(strlen(str1)=10) strcpy(string, str1); 答:这又会消失第一道改错题的错误了。strlen(str1)算出来的值是不包含结尾符0的,假如str1刚好为10个字符+1结尾符,string就得不到结尾符了。可将strlen(str1

17、)=10改为strlen(str1)10。 2. 找错 #define MAX_SRM 256 DSN get_SRM_no() static int SRM_no; int I; for(I=0;I SRM_no %= MAX_SRM; if(MY_SRM.state=IDLE) break; if(I=MAX_SRM) return (NULL_SRM); else return SRM_no; 答:我不知道这段代码的详细功能,但明显有两个错误 1,SRM_no没有赋初值 2,由于static的声明,使该函数成为不行重入(即不行猜测结果)函数,由于SRM_no变量放在程序的全局存储区中,每

18、次调用的时候还可以保持原来的赋值。这里应当去掉static声明。 3. 写出程序运行结果 int sum(int a) auto int c=0; static int b=3; c+=1; b+=2; return(a+b+c); void main() int I; int a=2; for(I=0;I5;I+) printf(%d, sum(a); 答:8,10,12,14,16 该题比拟简洁。只要留意b声明为static静态全局变量,其值在下次调用时是可以保持住原来的赋值的就可以。 2023年华为笔试题库三 题目 描述: 题目描述 接近开学了,小C才想起来数学教师布置了暑假作业。暑假作

19、业是许多张试卷,每张试卷所需的时间和猎取的价值已知,请你帮他安排一下,用他仅剩的一点时间来做最有价值的作业。 接口说明 原型: int GetMaxValue(int nPapers, int nRemain, int paper2, double* pMaxValue) 输入参数: int nPapers:试卷的数目(1Papers20) int nRemain:表示剩余的时间(1nRemain10000) int paper2:nPapers*2的数组,每一行的两个元素依次为做完这一份试卷所需的时间、做完这份试卷猎取的价值。假如剩余时间不够做完一份卷子,可依据剩余时间获得卷子的局部价值。

20、输出参数: double * pMaxValue:获得的最大价值 返回值: 0:特别,1:胜利 学问点: 工程环境请使用VS2023 代码 /*- * 日期:2023-06-30 * :SJF0115 * 题目:Home+Work * 来源:华为上机 -*/ #include OJ.h #include using namespace std; /* 输入: nPapers表示试卷的数目(1Papers20),nRemain表示剩余的时间(1nRemain10000),paper2是一个Papers*2的数组, 每一行的两个元素依次为做完这一份试卷所需的时间、做完这份试卷的价值 输出: *pM

21、axValue为获得的最大价值 返回: 0:特别 1:计算胜利返回 */ int GetMaxValue(int nPapers, int nRemain, int paper2, double* pMaxValue) if(nPapers 0 | nRemain 0 | pMaxValue = NULL) return -1; /if / 计算性价比 double* cost = new doublenPapers+1; for(int i = 0;i nPapers;+i) costi = (double)paperi1 / paperi0; /for /按性价比排序 for(int i

22、= 0;i nPapers-1;+i) for(int j = 0;j nPapers-i-1;+j) if(costj costj+1) swap(costj,costj+1); swap(paperj0,paperj+10); swap(paperj1,paperj+11); /if /for /for / 计算最大价值 int index = 0; int time,value; *pMaxValue = 0; while(nRemain 0 index nPapers) time = paperindex0; value = paperindex1; / 剩余时间缺乏以做一份试卷,取得局部价值 if(time nRemain) *pMaxValue += (double)nRemain / time * value; /if / 剩余时间可以做一份完整的试卷 else nRemain -= time; *pMaxValue += value; /else +index; /while /*for(int i = 0;i nPapers;+i) printf(时间:%d 价值:%d 性价比:%lfn,paperi0,paperi1,costi); /for*/ return 0; 【2023年华为笔试题库】

展开阅读全文
相关资源
相关搜索

当前位置:首页 > 教育专区 > 高考资料

本站为文档C TO C交易模式,本站只提供存储空间、用户上传的文档直接被用户下载,本站只是中间服务平台,本站所有文档下载所得的收益归上传人(含作者)所有。本站仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。若文档所含内容侵犯了您的版权或隐私,请立即通知得利文库网,我们立即给予删除!客服QQ:136780468 微信:18945177775 电话:18904686070

工信部备案号:黑ICP备15003705号-8 |  经营许可证:黑B2-20190332号 |   黑公网安备:91230400333293403D

© 2020-2023 www.deliwenku.com 得利文库. All Rights Reserved 黑龙江转换宝科技有限公司 

黑龙江省互联网违法和不良信息举报
举报电话:0468-3380021 邮箱:hgswwxb@163.com