2012华为校园招聘上机试题大全
- 格式:doc
- 大小:186.00 KB
- 文档页数:10
以下是收集到的两套题(没有添加答案),上机测试只有应聘软件研发的才会碰到。
有的写了点自己的解法,如果大家有好的想法欢迎讨论!大家一起学习嘛!以下是上机考试的一些注意事项:(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[] 数组中间两个位置偏右的那个位置上,然后再按从大到小的顺序,依次在第一个位置的两边,按照一左一右的顺序,依次存放剩下的数。
2012华为校园招聘上机试题+准确答案1.给定一个字符串,把字符串内的字母转换成该字母的下一个字母,a换成b,z换成a,Z换成A,如aBf转换成bCg,字符串内的其他字符不改变,给定函数,编写函数void Stringchang(const char*inpu,char*output)其中input是输入字符串,output是输出字符串答案:void Stringchang (char *input,char *output){ int len=strlen(input);for(int i=0;i<len;i++){if((input[i]<='Z'&&input[i]>='A')||(input[i]<='z'&&input[i]>='a'))output[i]=input[i]+1;else output[i]=input[i];}}2.求一个整型数字中有没有相同的部分,例如12389756123这个整型数字中相同的部分是123,相同的部分至少应该是2位数,如果有相同部分返回1,如果没有则返回0。
方法是先将整型数字转换到数组中,再判断。
函数为int same(int num)其中num是输入的整型数字答案:参考第三题很容易写出代码!3.求两个字符串的乘积,结果存到字符串中,例如字符串一中存的“657891”,字符串二中存的“521”,分别将字符串中的字符转换成整型数字,进行计算后,再转换成字符类型存储起来函数为void mul(char *input1,int n,char *input2, int m,char *output)其中input1和input2是输入,n是input1的长度,n2是input2的长度。
Output是输出答案:void mul(char *input1,int n,char *input2, int m,char *output){ int num1=StrToNum(input1,n);int num2=StrToNum(input2,m);int muti=num1*num2;NumToStr(muti,output);cout<<output<<endl;}int StrToNum(char *input,int len) //字符串转为int型变量{ int delta='0'-0,num=0;for(int i=len-1;i>=0;i--){num+=(input[i]-delta)*pow(10.0,len-i-1);}return num;}void NumToStr(int num,char *output) //int型变量转为字符串{ int len=0;while(1){int flag=num%(int)pow(10.0,len);if(flag==num) break;else len++;}int delta='0'-0,num0=num;for(int i=len-1;i>=0;i--){ output[len-i-1]=num0/(int)pow(10.0,i)+delta;num0=num0%(int)pow(10.0,i);}output[len]='\0';}。
2012届华为校园招聘上机考试题目(9月6日下午1点场)分类:华为准备2011-09-08 15:10 281人阅读评论(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)view plaincopy to clipboardprint?1. #include<stdio.h>2. #include<string.h>3. #include<iostream.h>4. #include<conio.h>5. #define N 56.7. i nt cal_score(int score[], int judge_type[], int n)8.9. {10. int expert=0;11. int dazhong=0;12. int zongfen=0;13. int i;14. int number=0;15.16. for(i=0;i<N;i++)17. {18. if(judge_type[i]==1)19. {20. expert=expert+score[i];21. number++;22. }23. else dazhong=dazhong+score[i];24. }25. if(number==N)26. {27. zongfen=(int)(expert/N);28. }29. else30.31. {32. expert=(int)(expert/number);33. dazhong=(int)(dazhong/(N-number));34. zongfen=int(0.6*expert+0.4*dazhong);35.36. }37. return zongfen;38.39. }40. int main()41. {42. int score[N];43. int judge_type[N];44. int numberlast=0;45. int i;46. printf("please input the %d score:\n",N);47. for(i=0;i<N;i++)48. scanf("%d",&score[i]);49. printf("please input the level(1:expert,2:dazhong)\n");50. for(i=0;i<N;i++)51. scanf("%d",&judge_type[i]);52. numberlast=cal_score(score,judge_type,N);53. printf("the last score is %d\n",numberlast);54. return 0;55. }运行结果分析:please input the 5 score:90 80 87 89 91please input the level(1:expert,2:dazhong)1 2 1 1 1the last score is 852、给定一个数组input[] ,如果数组长度n为奇数,则将数组中最大的元素放到output[] 数组最中间的位置,如果数组长度n为偶数,则将数组中最大的元素放到output[] 数组中间两个位置偏右的那个位置上,然后再按从大到小的顺序,依次在第一个位置的两边,按照一左一右的顺序,依次存放剩下的数。
华为2012第一次笔试题目总结:单选20,多选10,改错3,编程2有数据结构、网络、操作系统、数据库一、单项选择题(4选1)1.如果有N个节点用二叉树结构来存储,那么二叉树的最小深度是:解析:深度为k的二叉树,最多有2^k-1个节点,这时的二叉树成为满二叉树。
Log2(N+1)2.形结构的一种重要运算。
若已知一棵二叉树的前序序列是BEFCGDH,中序序列是FEBGCHD,则后序序列是:FEGHDCB3.下列算法的功能是:/*L是无头节点单链表*/LinkList Demo(LinkList L){ListNode *Q,*P;If(L&&L->next){Q=L;L=L->next;P=L;While(p->next)P=p->next;p->next=Q;Q->next=NULL;}return L;}解析:将单链表转变为循环链表4、循环单向链表指:最后一个节点的指针总是指向链表头。
5、折半查找算法的算法复杂度:O(log2N)6、void example(char acWelcome[]){Printf(“%d”,sizeof(acWelcome));return;}Void main(){Char acWelcome[]=”Welcome to Huawei Test”;Example(acWelcome);return;}的输出是——A 4B 5C 22D 23解析:237、设有如下定义:Unsigned long pulArray[]={6,7,8,9,10};Unsigned long *pulPtr;则下列程序段的输出结果为——pulPtr=pulArray;*(pulPtr+2)+=2;printf(“%d,%d\n”,*pulPtr,*(pulPtr+2));6,10pulPtr+2只是一个临时的指针相当于int *p,*q;q = PulPtr + 2;return pulPtr;而ptr++相当于ptr = ptr +1;return ptr;7,8指针的问题!!!8、#define M(x,y,z) x*y+zvoid main(){int a=1,b=2,c=3;cout<<M(a+b,b+c,c+a);}A 12B 13C 19D 89、如下:int func(int a){int b;switch(a){case 1:b=100;case 2:b=200;case 3:b=250;default:b=0; }return b;}问f(1)等于多少?010、给出以下定义:Char acX[]=”abcdefg”;Char acX[]={‘a’,’b’,’c’,’d’,’e’,’f’,’g’}; 则正确的叙述为()A、数组acX和数组acY等价B、数组acX和数组acY的长度相同C、数组acX的长度大于数组acY的长度D、数组acX的长度小于数组acY的长度11、有下面一段代码:Char szMsisdn[MAX_LEN_MSISDN-1];szMsisdn[sizeof(szMsidn)]=’\0’;则对执行以上代码后,正确的叙述为:程序执行后有问题,内存被踩。
目录样题-初级题:从考试成绩中划出及格线 (2)样题-中级题:亮着电灯的盏数 (2)样题-高级题:地铁换乘 (3)8.29去掉最大值、最小值之后剩下的个数 (3)8.29从5个人中选取2个人作为礼仪 (4)8.29验证括号是否匹配 (5)8.31回文数 (5)8.31将第一行中含有第二行中“23”的数输出并排序 (6)8.31翻译电话号码 (6)9.1.AM 将整数倒序输出,剔除重复数据 (7)9.1.AM 大数相减 (8)9.1.AM 判断if语句括号是否合法 (8)9.1.PM (8)9.1.PM (9)9.1.PM (9)样题-初级题:从考试成绩中划出及格线10个学生考完期末考试评卷完成后,A老师需要划出及格线,要求如下:(1) 及格线是10的倍数;(2) 保证至少有60%的学生及格;(3) 如果所有的学生都高于60分,则及格线为60分样题-中级题:亮着电灯的盏数一条长廊里依次装有n(1 ≤ n ≤ 65535)盏电灯,从头到尾编号1、2、3、…n-1、n。
每盏电灯由一个拉线开关控制。
开始,电灯全部关着。
有n个学生从长廊穿过。
第一个学生把号码凡是1的倍数的电灯的开关拉一下;接着第二个学生把号码凡是2的倍数的电灯的开关拉一下;接着第三个学生把号码凡是3的倍数的电灯的开关拉一下;如此继续下去,最后第n个学生把号码凡是n的倍数的电灯的开关拉一下。
n个学生按此规定走完后,长廊里电灯有几盏亮着。
注:电灯数和学生数一致。
样题-高级题:地铁换乘已知2条地铁线路,其中A为环线,B为东西向线路,线路都是双向的。
经过的站点名分别如下,两条线交叉的换乘点用T1、T2表示。
编写程序,任意输入两个站点名称,输出乘坐地铁最少需要经过的车站数量(含输入的起点和终点,换乘站点只计算一次)。
地铁线A(环线)经过车站:A1 A2 A3 A4 A5 A6 A7 A8 A9 T1 A10 A11 A12 A13 T2 A14 A15 A16 A17 A18 地铁线B(直线)经过车站:B1 B2 B3 B4 B5 T1 B6 B7 B8 B9 B10 T2 B11 B12 B13 B14 B158.29去掉最大值、最小值之后剩下的个数1、输入一串数,以','分隔,输出所有数中去掉最大值、最小值之后剩下的个数。
同学都陆续到华为参加了机试,题目整体难度不大,基本上都是考字符串相关的题目。
这里就分享一套2012年华为南京机试C++或者C的编程题目。
2012年华为南京机试第一题整数化成字符串给定一个整数(有可能是负数),将整数变成字符串。
函数已经声明好类似void change(int number, char s[])的形式。
可以自己写用例测试。
2012年华为南京机试第二题单链表逆序给定一个已经定义好的单链表,将单链表中的数字逆序。
输入为head指针,返回的也是一个head指针。
函数声明为void sor(Node **head)的形式。
2012年华为南京机试第三题字符串最大回文子串给定一个字符串,寻找它的一个最大子串,该子串是回文。
例如给定用例字符串”gabcdcbaef”,那么最大回文字串是”abcdcba”。
函数声明为void huiwen(char input[], intlen, char output[])。
一天几个考场的题目有相同的也有不同的,基本上难度都不大。
要求做前两题就可以了,有能力的可以做第三题并且计入总分。
有同学做完当场就看到是100分,也有0分的,至于怎么计分的不太清楚。
希望七叶草提供的2012年华为南京机试编程题对你有帮助!武汉题目:有一个数组a[N]如a[10]={0,1,2,3,4,5,6,7,8,9}每隔两个数删除一个数,如0,1,2(删除),3,4,5(删除),6,7,8(删除),9,到数组尾部回到数组头部继续删除,要求编写一个函数实现实现上述操作,返回最后一个数的数组下标。
函数接口:intgetLast(intiLen)参数:数组初始元素个数iLen01 #include <stdio.h>02 #include <stdlib.h>0304 typedef struct node *List;05 typedef struct node *PNode;0607 typedef struct node08 {09 int data;10 struct node *next;11 }Node;1213 int getLast(int iLen)14 {15 int i;16 List L;17 PNodetempNode,current;18 L = (List)malloc(sizeof(Node));19 L->next = NULL;20 current = L;21 for (i=0; i<iLen; i++)22 {23 tempNode = (PNode)malloc(sizeof(Node));24 tempNode->data = i;25 current->next = tempNode;26 current = tempNode;27 }28 current->next = L->next;29 current = L;30 while (iLen> 1)31 {32 current = current->next->next;33 tempNode = current->next;34 current->next = tempNode->next;35 printf("%d\n",tempNode->data);36 free(tempNode);37 iLen--;38 }39 return current->data;40 }4142 int main()43 {44 printf("last of 20 is %d",getLast(20));45 return 0;46 }编程题(共2题,第一题40分,第二题60分,共100分。
2011年华为软件校园招聘编程测验1、请上机编写程序,按题目要求提交文件。
[详见考试说明,点击进入考试说明]3、评卷通过在给定用例输入下,严格按照试题要求比较考生实现函数的输出与预设输出。
两者相同则得分,不同则不得分。
4、评卷人保证测试用例输入参数的合法性,考生不用考虑输入参数非法或异常的情况5、评卷人保证测试用例输入在被测函数正常合法情况下使用不会导致程序错误6、如果考生函数异常导致程序崩溃或死循环,则自动评卷可能会被人为终止,剩余用例不被执行,无法得分7、基于上述阅卷规则,请考生严格按照题目要求功能实现程序,尽量保证实现函数的稳健性,同时建议完成一道题并调试保证正确性后,再考虑并实现下一题目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;}1. 数组比较(20分)•问题描述:比较两个数组,要求从数组最后一个元素开始逐个元素向前比较,如果2个数组长度不等,则只比较较短长度数组个数元素。
华为笔试来源:马彬龙好孩子的日志1、局部变量能否和全局变量重名?答:能,局部会屏蔽全局。
要用全局变量,需要使用"::"局部变量可以与全局变量同名,在函数内引用这个变量时,会用到同名的局部变量,而不会用到全局变量。
对于有些编译器而言,在同一个函数内可以定义多个同名的局部变量,比如在两个循环体内都定义一个同名的局部变量,而那个局部变量的作用域就在那个循环体内。
2、如何引用一个已经定义过的全局变量?答:extern可以用引用头文件的方式,也可以用extern关键字,如果用引用头文件方式来引用某个在头文件中声明的全局变理,假定你将那个变写错了,那么在编译期间会报错,如果你用extern方式引用时,假定你犯了同样的错误,那么在编译期间不会报错,而在连接期间报错。
3、全局变量可不可以定义在可被多个.C文件包含的头文件中?为什么?答:可以,在不同的C文件中以static形式来声明同名全局变量。
可以在不同的C文件中声明同名的全局变量,前提是其中只能有一个C文件中对此变量赋初值,此时连接不会出错。
4、语句for( ;1 ;)有什么问题?它是什么意思?答:无限循环,和while(1)相同。
5、do……while和while……do有什么区别?答:前一个循环一遍再判断,后一个判断以后再循环。
6、请写出下列代码的输出内容#i nclude<stdio.h>main(){int a,b,c,d;a=10;b=a++;c=++a;d=10*a++;printf("b,c,d:%d,%d,%d",b,c,d);return 0;}答:10,12,120一、判断题(对的写T,错的写F并说明原因,每小题4分,共20分)1、有数组定义int a[2][2]={{1},{2,3}};则a[0][1]的值为0。
()2、int (*ptr) (),则ptr是一维数组的名字。
()3、指针在任何情况下都可进行>, <, >=, <=, = =运算。
/* 请在这里实现下列函数, c c++语法不限, 最后需要保证程序编译连接通过, 并生成test.exe文件. *//* 相关宏定义及函数声明见'func.h'头文件*/#include "stdafx.h"#include <stdio.h>#include <memory.h>#include <string.h>#include <stdlib.h>//#include "func.h"#define MAXCHAR 100/* 请按照要求实现下列函数,pOutputStr的长度足够大*/#include "string.h"#include "stdlib.h"/*题目描述(60分):通过键盘输入一串小写字母(a~z)组成的字符串。
请编写一个字符串过滤程序,若字符串中出现多个相同的字符,将非首次出现的字符过滤掉。
比如字符串“abacacde”过滤结果为“abcde”。
要求实现函数:void stringFilter(const char *pInputStr, long lInputLen, char *pOutputStr);【输入】pInputStr:输入字符串lInputLen:输入字符串长度【输出】pOutputStr:输出字符串,空间已经开辟好,与输入字符串等长;【注意】只需要完成该函数功能算法,中间不需要有任何IO的输入输出示例输入:“deefd” 输出:“def”输入:“afafafaf” 输出:“af”输入:“pppppppp” 输出:“p”*//* main函数已经隐藏,这里保留给用户的测试入口,在这里测试你的实现函数,可以调用printf打印输出*//* 当前你可以使用其他方法测试,只要保证最终程序能正确执行即可*//* 该函数实现可以任意修改,但是不要改变函数原型。
华为2012年校园招聘法务部笔试、面试题(根据记忆整理)(小编推荐)第一篇:华为2012年校园招聘法务部笔试、面试题(根据记忆整理)(小编推荐)笔试共5道选择题,5道判断题,2道案例式简答,1道汉译英,1道英译汉选择题和判断题多是合同法和国际经济法印象不深了,大概是合同解除的条件,无效合同,CIF的买卖方义务,质权生效条件,就差不多这种类型,具体不记得了,比较常规的知识点。
简答题第一题我忘了,囧第二题是:如果你是公司律师,产品购买方发来律师函说产品有质量问题,律师该怎么处理翻译题都是法律方面的内容,但不偏,至少要知道一下合同用语吧汉译英就考到翻译大意是“合同双方约定多种语言的合同,如何推定合同中的用词”这么一段话。
英译汉比较简单,甲方应保障一方哪些权利,要知道知情权等的英文,也不难面试比较灵活,会先中文自我介绍,然后他会根据你的简历提问,多是专业方面的问题,比较具体,对我的提问是合同法居多,格式条款啊,合同解除免责事由是,禁止约定的内容啊等等,还问了劳务派遣的风险规避,毕竟他们公司劳务派遣的也多嘛。
也会问问你的人生方面的,泛泛而谈。
最后会英文考察,会要你英文自我介绍,这个也比较灵活,他随便问的。
差不多这些吧,这是一面的流程,祝你好运第二篇:华为校园招聘笔试面试题(1)什么是预编译,何时需要预编译:答案:1、总是使用不经常改动的大型代码体。
2、程序由多个模块组成,所有模块都使用一组标准的包含文件和相同的编译选项。
在这种情况下,可以将所有包含文件预编译为一个预编译头。
(2)char * const p char const * p const char *p 上述三个有什么区别?答案:char * const p;//常量指针,p的值不可以修改char const * p;//指向常量的指针,指向的常量值不可以改const char *p; //和char const *p(3)char str1[] = “abc”;char str2[] = “abc”;const char str3[] = “abc”;const char str4[] = “abc”;const char *str5 = “abc”;const char *str6 = “abc”;char *str7 = “abc”;char *str8 = “abc”;cout < <(str1 == str2)< < endl;cout < <(str3 == str4)< < endl;cout < <(str5 == str6)< < endl;cout < <(str7 == str8)< < endl;结果是:0 0 1 1 str1,str2,str3,str4是数组变量,它们有各自的内存空间;而str5,str6,str7,str8是指针,它们指向相同的常量区域。
2012华为校园招聘机考试题总结(厦门大学)1、删除子串,只要是原串中有相同的子串就删掉,不管有多少个,返回子串个数。
#include <stdio.h>#include <stdlib.h>#include <assert.h>#include <string.h>int delete_sub_str(const char *str,const char *sub_str,char *result){assert(str != NULL && sub_str != NULL);const char *p,*q;char *t,*temp;p = str;q = sub_str;t = result;int n,count = 0;n = strlen(q);tmep = (char *)malloc(n+1);memset(temp,0x00,n+1);while(*p){memcpy(temp,p,n);if(strcmp(temp,q) == 0 ){count++;memset(temp;0x00,n+1);p = p + n;}else{*t = *p;p++;t++;memset(temp,0x00,n+1);}}free(temp);return count;}int main(){char s[100] = {‘\0’};int num = delete_sub_str(“123abc12de234fg1hi34j123k”,”123”,s);printf(“The number of sub_str is %d\r\n”,num);printf(“The result string is %s\r\n”,s);}2、约瑟夫环是一个数学的应用问题:已知n个人(以编号1,2,3...n分别表示)围坐在一张圆桌周围。
从编号为k的人开始报数,数到m的那个人出列;他的下一个人又从1开始报数,数到m的那个人又出列;依此规律重复下去,直到圆桌周围的人全部出列。
2012届华为校园招聘上机考试题目(9月6日下午1点场)分类:华为准备2011-09-08 15:10 281人阅读评论(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)view plaincopy to clipboardprint?1. #include<stdio.h>2. #include<string.h>3. #include<iostream.h>4. #include<conio.h>5. #define N 56.7. i nt cal_score(int score[], int judge_type[], int n)8.9. {10. int expert=0;11. int dazhong=0;12. int zongfen=0;13. int i;14. int number=0;15.16. for(i=0;i<N;i++)17. {18. if(judge_type[i]==1)19. {20. expert=expert+score[i];21. number++;22. }23. else dazhong=dazhong+score[i];24. }25. if(number==N)26. {27. zongfen=(int)(expert/N);28. }29. else30.31. {32. expert=(int)(expert/number);33. dazhong=(int)(dazhong/(N-number));34. zongfen=int(0.6*expert+0.4*dazhong);35.36. }37. return zongfen;38.39. }40. int main()41. {42. int score[N];43. int judge_type[N];44. int numberlast=0;45. int i;46. printf("please input the %d score:\n",N);47. for(i=0;i<N;i++)48. scanf("%d",&score[i]);49. printf("please input the level(1:expert,2:dazhong)\n");50. for(i=0;i<N;i++)51. scanf("%d",&judge_type[i]);52. numberlast=cal_score(score,judge_type,N);53. printf("the last score is %d\n",numberlast);54. return 0;55. }运行结果分析:please input the 5 score:90 80 87 89 91please input the level(1:expert,2:dazhong)1 2 1 1 1the last score is 852、给定一个数组input[] ,如果数组长度n为奇数,则将数组中最大的元素放到output[] 数组最中间的位置,如果数组长度n为偶数,则将数组中最大的元素放到output[] 数组中间两个位置偏右的那个位置上,然后再按从大到小的顺序,依次在第一个位置的两边,按照一左一右的顺序,依次存放剩下的数。
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)1.#include "iostream"ing namespace std;3.4.int cal_score(int score[], int judge_type[], int n)5.{6. if (NULL==score||NULL==judge_type||0==n)7. return 0;8.9.int sum=0;10.int sum1=0,count1=0;11.int sum2=0,count2=0;12. for(int i=0;i<n;i++)13. {14. if (judge_type[i]==1)15. {16. sum1=sum1+score[i];17. count1++;18. }19. else20. {21. sum2=sum2+score[i];22. count2++;23. }24. }25. if(0==count2)26. sum=sum1/count1;27. else28. sum=(sum1/count1)*0.6+(sum2/count2)*0.4;29. return sum;31.void main()32.{33.int score[3]={12,13,15};34.int judge_type[3]={1,1,2};35. printf("%d",cal_score(score, judge_type, 3) );36.37.}//2. 给定一个数组input[] ,如果数组长度n为奇数,则将数组中最大的元素放到output[] 数组最中间的位置,如果数组长度n为偶数,则将数组中最大的元素放到output[] 数组中间两个位置偏右的那个位置上,然后再按从大到小的顺序,依次在第一个位置的两边,按照一左一右的顺序,依次存放剩下的数。
1、删除子串,只要是原串中有相同的子串就删掉,不管有多少个,返回子串个数。
#include <stdio.h>#include <stdlib.h>#include <assert.h>#include <string.h>int delete_sub_str(const char *str,const char *sub_str,char *result){assert(str != NULL && sub_str != NULL);const char *p,*q;char *t,*temp;p = str;q = sub_str;t = result;int n,count = 0;n = strlen(q);temp = (char *)malloc(n+1);memset(temp,0x00,n+1);while(*p){memcpy(temp,p,n);if(strcmp(temp,q) == 0 ){count++;memset(temp,0x00,n+1);p = p + n;}else{*t = *p;p++;t++;memset(temp,0x00,n+1);}}free(temp);return count;}int main(){char s[100] = {‘\0’};int num =delete_sub_str(“123abc12de234fg1hi34j123k”,”123”,s);printf(“The number of sub_str is %d\r\n”,num);printf(“The result string is %s\r\n”,s);}2、约瑟夫环是一个数学的应用问题:已知n个人(以编号1,2,3...n分别表示)围坐在一张圆桌周围。
从编号为k的人开始报数,数到m的那个人出列;他的下一个人又从1开始报数,数到m的那个人又出列;依此规律重复下去,直到圆桌周围的人全部出列。
#include<stdio.h>#include<stdlib.h>typedef struct Node{int num;struct Node *next;}LinkList;LinkList *creat(int n){LinkList *p,*q,*head;int i=1;p=(LinkList *)malloc(sizeof(LinkList));p->num=i;head=p;for(i=2;i<=n;i++){ q=(LinkList *)malloc(sizeof(LinkList));q->num=i;p->next=q;p=q;}p->next=head; /*使链表尾指向链表头形成循环链表*/ return head;}void fun(LinkList *L,int m){int i;LinkList *p,*s,*q;p=L;printf("出列顺序为:");while(p->next!=p){for(i=1;i<m;i++){ q=p;p=p->next;}printf("%5d",p->num);s=p;q->next=p->next;p=p->next;free(s);}printf("%5d\n",p->num);}int main(){LinkList *L;int n, m;n=9;m=5;L=creat(n);fun(L,m);return 0;}3、比较一个数组的元素是否为回文数组#include <stdio.h>#include <string.h>Void huiwen(char str[]){int i,len,k=1;len=strlen(str);for(i=0;i<len/2;i++){if(str[i]!=str[len-i-1]){k=0;break;}}if(k==0)printf("%s 不是一个回文数\n",str);elseprintf("%s 是一个回文数\n",str);}void main(){char str[100] = {0};printf("Input a string:");/*提示Input a string:*/ scanf("%s", str); /*scan()函数输入一个字符串:*/huiwen(str);}4、数组比较(20分)• 问题描述:比较两个数组,要求从数组最后一个元素开始逐个元素向前比较,如果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 a rray2[])【输入】 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<stdlib.h>#include<stdio.h>#include<string.h>int array_compare(int len1, int array1[], int len2, int array2[]){int count=0;for( ;len1>=0&&len2>=0 ;len1--,len2--){if(array1[len1-1]==array2[len2-1]){count++;}}return count;}int main(){int result=0;int array1[]={1,3,5};int len1=3;int array2[]={77,12,1,3,5};int len2=5;result=array_compare( len1, array1, len2, array2); ///result=array_compare( len1, array1[], len2, array2[]);不能这样,函数形参中永远只是传得首地址,不能传数组切记!!printf("the result is %d", result);}#include<stdio.h> //written by myself#include<string.h>int array_compare(int len1,int array1[],int len2,int array2[]);int main(){int arr1[] = {1,3,5};int arr2[] = {77,21,1,3,5,7};int len1 = 0,len2 = 0;len1 = sizeof(arr1)/sizeof(int);len2 = sizeof(arr2)/sizeof(int);printf("%d %d\n",len1,len2);printf("%d",array_compare(len1,arr1,len2,arr2));return 0;}int array_compare(int len1,int array1[],int len2,int array2[]){int num = 0;int i = 0,j = 0;for(i = len1 - 1,j = len2 - 1;i >= 0 && j >= 0;i--,j--)if(array1[i] != array2[j])num++;return num;}/*int array_compare(int len1, int array1[], int len2, int array2[]){if(len1 == len2) {int count = 0;for (int i=0;i<len1;i++){if(array1[i]!=array2[i]) count++;}return count;} else if(len1<len2) {return array_compare(len1,array1,len1,array2+len2-len1);} else {return array_compare(len2,array1+len1-len2,len2,array2);}}*/#include<stdio.h> //另一种算法int compare_array(int len1,int array1[],int len2,int array2[]){int i,t,small,num=0;//把ã?两¢?数ºy组Á¨¦倒Ì1置?for(i=0;i<len1/2;i++){t=array1[i];array1[i]=array1[len1-i-1];array1[len1-i-1]=t;}for(i=0;i<len2/2;i++){t=array2[i];array2[i]=array2[len2-i-1];array2[len2-i-1]=t;}/* for(i=0;i<len1;i++)//输º?出?倒Ì1置?后¨®的Ì?两¢?数ºy组Á¨¦printf("%d ",array1[i]);printf("\n");for(i=0;i<len2;i++)printf("%d ",array2[i]);*/printf("\n");if(len1>len2)small=len2;elsesmall=len1;num=small;for(i=0;i<small;i++){if(array1[i]==array2[i])num--;}printf("num=%d\n",num);return num;}void main(){int array1[5]={77,21,1,3,5},array2[3]={1,3,5};int len1=5,len2=3;compare_array(len1,array1,len2,array2);}5、约瑟夫问题• 问题描述:输入一个由随机数组成的数列(数列中每个数均是大于0的整数,长度已知),和初始计数值m。