2014华为上机题
2014华为机试笔试题目

2014华为机试笔试题目2014华为机试笔试题目1.输入摸一个数,然后将其倒过来相加,如果和不是回文串,那么将和再采取同样的操作,在判断得到的是否为回文串,这样往返7次,如果其中有一次是回文就直接打出来,若都没有,那么输出0;也很简单!用库函数更简单,itoa这个!整数转成字符,然后判断回文!2.关于匹配的字符串的个数的最大值,即目标字符串与多个字符串比配,找出匹配最多的那个字符串。
其实代码很简单,我当时用2个数组,下标即为字符,值为出现次数,这样比较即可;可是我输入字符的代码写错了比如要输入Li si;到一个字符数组里面,我写成了char a[200];cin a;//这里错了,应该写为cin.getline(a,200);因为cin输入遇到空格就认为输入结束,所以只有li,没有si3.输入一个十进制的数,与一个n整数,求输出这个十进制数的n 进制的数!分析:哎,真倒霉,可以用atoi函数啊itoa函数#include cstdlib #include cstdio int main(){int num = 10; char str[100]; itoa(num, str, 2);printf( %s\n , str);return 0;}itoa()函数有3个参数:第一个参数是要转换的数字,第二个参数是目标字符串,第三个参数是转移数字时所用的基数。
在上例中,转换基数为10。
10:十进制;2:二进制于是想到了一个十进制转二进制的方法:#include cstdlib#include cstdioint main(){int num = 10;char str[100];int n = atoi(itoa(num, str, 2)); printf( %d\n ,n); return 0;}。
华为上机题

1.样题-初级题:从考试成绩中划出及格线10个学生考完期末考试评卷完成后,A老师需要划出及格线,要求如下:(1) 及格线是10的倍数;(2) 保证至少有60%的学生及格;(3) 如果所有的学生都高于60分,则及格线为60分2.样题-中级题:亮着电灯的盏数一条长廊里依次装有n(1 ≤ n ≤ 65535)盏电灯,从头到尾编号1、2、3、…n-1、n。
每盏电灯由一个拉线开关控制。
开始,电灯全部关着。
有n个学生从长廊穿过。
第一个学生把号码凡是1的倍数的电灯的开关拉一下;接着第二个学生把号码凡是2的倍数的电灯的开关拉一下;接着第三个学生把号码凡是3的倍数的电灯的开关拉一下;如此继续下去,最后第n个学生把号码凡是n的倍数的电灯的开关拉一下。
n个学生按此规定走完后,长廊里电灯有几盏亮着。
注:电灯数和学生数一致。
3.样题-高级题:地铁换乘已知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 B154.去掉最大值、最小值之后剩下的个数输入一串数,以','分隔,输出所有数中去掉最大值、最小值之后剩下的个数。
(其中最大值与最小值可能有多个)Smple input:3,3,5,3,6,9,7,9 Sample outPut: 35.从5个人中选取2个人作为礼仪要从5个人中选取2个人作为礼仪,其中每个人的身高范围为160-190,要求2个人的身高差值最小(如果差值相同的话,选取其中最高的两人),以升序输出两个人的身高。
华为上机笔试题——BYXianNv

1.给定一个字符串,把字符串内的字母转换成该字母的下一个字母,a换成b,z换成a,Z换成A,如aBf转换成bCg,字符串内的其他字符不改变,给定函数,编写函数void Stringchang(const char*inpu,char*output)其中input是输入字符串,output是输出字符串#include<stdio.h>#include<assert.h>void Stringchang(const char*input,char*output){const char *p=input;/*if(input==NULL){printf("ERROR"); //用这种表示方式可否?return; //用return 好不好?} */assert(input!=NULL);while(*p!='\0'){if((*p>='a')&&(*p<='y')||(*p>='A')&&(*p<='Y') )*output=*p+1;else if(*p=='z'||*p=='Z')*output=*p+1-26;else*output=*p;output++;p++;}*output=0;}void main(){char a[11]={"abc"}; //如何模拟空指针的情况char b[11];Stringchang(a,b);printf("%s",b);}2.求一个整型数字中有没有相同的部分,例如12389756123这个整型数字中相同的部分是123,相同的部分至少应该是2位数,如果有相同部分返回1,如果没有则返回0。
函数为int same(int num)其中num是输入的整型数字#include<iostream>using namespace std;int same(int num) //整数值的范围:long int为-2(共10位)到正2开头共10位;unsigned //long int 为从0到4的共10位数{char a[11];int i=0,m=0,j=0;while(num){a[i]=num%10+'0';num=num/10;i++;j++;}i=0;int k=j;while(i<j){char temp=a[i];a[i]=a[j-1];a[j-1]=temp;i++;j--;}for(i=0;i<k-2;i++) //更标准{for(j=i+1;j<k-1;j++) //更妥当当为888时也判断的算是{if(a[i]==a[j]&&a[i+1]==a[j+1])return 1;}}return 0;}int main() //是不是用int 会好一点?{int a,b;cin>>a;b=same(a);cout<<b<<endl;return 0;}3.求两个字符串的乘积,结果存到字符串中,例如字符串一中存的“657891”,字符串二中存的“521”,分别将字符串中的字符转换成整型数字,进行计算后,再转换成字符类型存储起来.函数为void mul(char *input1,int n,char *input2, int m,char *output)其中input1和input2是输入,n是input1的长度,m是input2的长度。
华为2014年上机笔试题

华为2014年上机笔试题华为2014年上机笔试题1.输入整型数组求数组的最小数和最大数之和,例如输入1,2,3,4则输出为5,当输入只有一个数的时候,则最小数和最大数都是该数,例如只输入1,则输出为2;另外数组的长度不超过50参考代码:#includemain(){int num[50]={0};int i,n;printf(“请输入整型数组的长度(1~50):”);scanf(“%d”,&n);printf(“请输入整型数组的元素:”);for (i=0;i<n;i++)< bdsfid="102" p=""> </n;i++)<>{scanf(“%d”,&num[i]);}int min_num=num[0];int max_num=num[0];for(int j=0;j<n;j++)< bdsfid="109" p=""> </n;j++)<>{if(max_num<num[j])< bdsfid="112" p=""> </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.求两个长长整型的数据的和并输出,例如输入1233333333333333 。
3111111111111111111111111.。
,则输出。
#include#include#includemain(){char *num1,*num2; //两个长长整型数据char *sum;// int temp;int len_num1,len_num2; // 两个长长整型数据的长度int len_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_num2;int len_max1=len_max;sum=(char*)malloc(sizeof(char)*len_max);memset(sum,0×00,len_max+1);//切忌初始化for(;len_num1>0&&len_num2>0;len_num1–,len_num2–){sum[len_max--]=((num1[len_num1-1]-’0′)+(num2[len_num2-1]-’0′));}if(len_num1>0){sum[len_max--]=num1[len_num1 - 1 ]-’0′;len_num1–;}if(len_num2>0){sum[len_max--]=num1[len_num2 - 1]-’0′;len_num2–;}for(int j=len_max1;j>=0;j–) //实现进位操作{// temp=sum[j]-’0′;if(sum[j]>=10){sum[j-1]+=sum[j]/10;sum[j]%=10;}}char *outsum=(char*)malloc(sizeof(char)*len_max1);j=0;while(sum[j]==0) //跳出头部0元素j++;for(int m=0;m<len_max1;j++,m++)< bdsfid="176" p=""> </len_max1;j++,m++)<>outsum[m]=sum[j]+’0′;outsum[m]=’\0′;printf(“输出两长长整型数据之和:%s\n”,outsum);return 0;}3.通过键盘输入一串小写字母(a~z)组成的字符串。
最全华为上机试题及部分答案

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个数组长度不等,则只比较较短长度数组个数元素。
华为_机考_答案(精选27题)

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;}2 数组比较(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 array2[])•示例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函数如下:using namespace std;int f(int len1,int arry1[],int len2,int arry2[]){ int k=0;for(int i=len1-1,j=len2-1;i>=0&&j>=0;i--,j--)if(arry1[i]!=arry2[j])k++;return k;}int main(){int num1[]={1,3,5};int num2[]={77,21,1,3,5};int k=f(3,num1,5,num2);cout<<k<<endl;return 0;}3. 约瑟夫问题•问题描述:输入一个由随机数组成的数列(数列中每个数均是大于0的整数,长度已知),和初始计数值m。
华为机试题目总结(程序篇)

自己写的,水平很挫,仅供参考目录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.超大整数加法运算,大整数会用字符串或者数组来存,不过注意低位存字符前面几位,高位存后面,存到字符中应该存“”。
这边我用的是数组35.排序总结36.将一个字符串空格分隔,并倒序输出37.删除一个字符串中的某个字符串38.取出一个字符串中所有的数字,并取出所有字母39,简单的字符统计40.查找字符串中空格分隔的单词的最大长度41.二叉树的操作42.分块查找1.语言识别问题#include<iostream>using namespace std;void main(){int n,S_num=0,T_num=0,m=0;cin>>n;char ch;getchar();for(int i=0;i<n;i++){ // m=0;while(1){ ch=getchar();/* m++;if((m>3)&& (ch=='\n')){m=0;break;}*/if(ch=='\n') break;if(ch=='s'||ch=='S') S_num++;if(ch=='t'||ch=='T') T_num++;}}if(S_num<T_num) cout<<"English\n";else cout<<"Deutsch\n";}2.销售网络问题(未完成) #include<iostream>using namespace std;void main(){int n,S_num=0;cin>>n;int a[n];for(int i=0;i<n-1;i++)cin>>a[i];if(a[])for(int i=0;i<n;i++){ // m=0;while(1){ ch=getchar();/* m++;if((m>3)&& (ch=='\n')){m=0;break;}*/if(ch=='\n') break;if(ch=='s'||ch=='S') S_num++;if(ch=='t'||ch=='T') T_num++;}}if(S_num<T_num) cout<<"English\n";else cout<<"Deutsch\n";}3.股票投资问题#include<iostream>using namespace std;void main()int B,C=0,D=0,E=0,i,j,k,l,n,m;int A;int a[12];//未来天得股价int b[12][12];cin>>B;//测试数memset(b,0,sizeof(b));//for(i=0;i<B;i++)cin>>A;for(j=0;j<12;j++)cin>>a[j];int temp=0;for(k=0;k<11;k++)for(l=k+1;l<12;l++){temp=A/a[k];b[k][l]=temp*(a[l]-a[k]);if(b[k][l]<0)b[k][l]=0;}int max=b[0][1];m=0;n=1;for(k=0;k<11;k++)for(l=k+1;l<12;l++){if(b[k][l]>max){ max=b[k][l];m=k;n=l;}if(b[k][l]==max)//相等的取购价低的{ if(a[k]<a[m]){ max=b[k][l];m=k;n=l;}}}if (max==0){cout<<"IMPOSSIBLE"<<endl;}else{C=m+1;D=n+1;E=max;cout<<C<<" "<<D<<" "<<E<<endl;}4.判断手机号码合法性#include<iostream>using namespace std;int verifyMsisdn(char* inMsisdn){int n=0;int i=0;int j=0;char *p;p=inMsisdn;while(p[i]!='\0'){ i++;n++;}if(n!=13)return 1;else{while(p[j]!='\0'){if(!((p[j]>='0' && p[j]<='9'))){return 2;break;}j++;}if(!(p[0]=='8'&& p[1]=='6'))return 3;else return 0;}}{char a[20];cin>>a;int m=verifyMsisdn(a);cout<<m;}5.元音字母复制#include<iostream>using namespace std;void sortVowel (char* input){ int j=0;char output[50]={0};for(int i=0;input[i]!='\0';i++){ if(input[i]=='a' || input[i]=='e'|| input[i]=='i'|| input[i]=='o'|| input[i]=='u') {output[j]=input[i];j++;}}int w=j;char temp;for(int k=0;k<j-1;k++)for(int l=0;l<j-1-k;l++){if(output[l]>output[l+1]){temp=output[l];output[l]=output[l+1];output[l+1]=temp;}}for(int i=0;input[i]!=0;i++){ if( input[i]=='A'|| input[i]=='E'|| input[i]=='I'|| input[i]=='O'|| input[i]=='U') {output[j]=input[i];}}char temp2;for(int m=w;m<j-1;m++)for(int n=w;n<j-1-m;n++){if(output[n]>output[n+1]){temp2=output[n];output[n]=output[n+1];output[n+1]=temp2;}}cout<<output;}void main(){char a[50];cin.get(a,50);sortVowel(a);}6.验证身份证号#include<iostream>using namespace std;int verifyIDCard(char* input) {int n=0;int i=0;int j=0;p=input;while(p[i]!='\0'){ i++;n++;}if(n!=18)return 1;else{while(j<17){if(!((p[j]>='0' && p[j]<='9'))){return 2;break;}j++;}if(!(p[17]=='x'|| (p[17]>='0' && p[17]<='9')))return 3;else{int year=(p[6]-'0')*1000+(p[7]-'0')*100+(p[8]-'0')*10+(p[9]-'0');int month=(p[10]-'0')*10+(p[11]-'0');int day=(p[12]-'0')*10+(p[13]-'0');if(!(year>=1900 && year<=2100))return 4;else{if(!(month>=1 && month<=12))return 5;else{//能被整除且不能被整除或能被整除的年份bool ryear=(year%4==0 && year%100!=0) || (year%400==0);if(!((!ryear && day>0 && day<29)|| (ryear && day>0 && day<=29)))return 6;else{return 0;}}}}}void main(){for(int c=0;c<10;c++){char a[20];cin>>a;int m=verifyIDCard(a);cout<<m;}}7.选秀节目打分#include<iostream>using namespace std;#define N 5int total(int score[],int judge_type[],int cn){ int sum1=0,sum2=0,m=0,n=0,aver=0,totalscore=0;for(int i=0;i<cn;i++){ if(judge_type[i]=1){sum1+=score[i];m++;}else{sum2+=score[i];n++;}}if(n==0)totalscore=sum1/m;else{ totalscore=(int)(sum1/m * 0.6+sum2/n * 0.4);}return totalscore;}void main(){int score[N];int judge_type[N];for(int i=0;i<N;i++){ cout<<"输入第"<<i+1<<"个评委的类别"<<endl;cin>>judge_type[i];cout<<"输入第"<<i+1<<"个评委的分数"<<endl;cin>>score[i];}int totalscore= total(score,judge_type,N);cout<<totalscore<<endl;}8.数组最大值放中间,其他依次放其左右(规律未找着,未完成)#include<iostream>using namespace std;void sort(int input[], int n, int output[]){int i,j;int temp =0;for(i =0; i<n-1; i++)for(j =0; j<n-i-1; j++){if(input[j]>input[j+1]){temp = input[j];input[j] = input[j+1];input[j+1] = temp;}}if(n%2 ==0){for(i =0 ; i<n/2; i++){output[i] = input[2*i];}for(i =0; i<n/2; i++){output[n/2+i] = input[n-1-2*i];}}else{for(i=0; i<(n-1)/2; i++){output[i] = input[2*i+1];}output[(n-1)/2]= input[n-1];for(i = 0; i<(n-1)/2; i++){output[(n-1)/2+1+i] = input[n-3-2*i];}}for(i = 0 ; i<n; i++){printf("%d", output[i]);}printf("\n");}int main(){int input1[] = {3, 6, 1, 9, 7};int input2[] = {3, 6, 1, 9, 7, 8};int output1[5] = {0};int output2[6] = {0};sort( input1, 5,output1) ;sort(input2, 6, output2) ;}9.任务调度(解题关键,需要一个容器来承载下标跟值的一一对应关系,最好就是定义一个结构体) #include<iostream>using namespace std;struct table{ int number;int value;};void scheduler(int task[], int system_task[], int user_task[],int n){struct table *sb=(struct table *)malloc(n*sizeof(struct table));for(int i=0; i<n; i++){ sb[i].number=i;sb[i].value=task[i];}struct table temp;for(int k=0; k<n-1; k++)for(int j=0; j<n-1-k; j++){if(sb[j].value>sb[j+1].value){temp=sb[j];sb[j]= sb[j+1];sb[j+1] = temp;}}int cs=0,cu=0;for(int l=0; l<n; l++){if(sb[l].value<50){system_task[cs]=sb[l].number;cs++;}else if(sb[l].value<=255){user_task[cu]=sb[l].number;cu++;}elsecontinue;}system_task[cs]=-1;user_task[cu]=-1;free(sb);for(int m=0;m<=cs;m++){cout<<system_task[m];}printf("\n");for(int n=0;n<=cu;n++){cout<<user_task[n];}}int main(){int task[] = {0, 30, 155, 1, 80, 300, 170, 40, 99};int n=9;int count_sys=0,count_user=0;for(int i=0;i<9;i++){if(task[i]<50)count_sys++;else if(task[i]<=255)count_user++;elsecontinue;}int *system_task=(int *)malloc(count_sys*sizeof(int)+4);int *user_task=(int *)malloc(count_user*sizeof(int)+4);scheduler(task, system_task, user_task,9);//int *p = system_task;//int *q = user_task;//////printf("%d%d\n", count_sys,count_user);// for(int i=0;i<count_sys+1;i++)// {// printf("%d", system_task[i]);// printf("\n");//// for(int i=0;i<count_user+1;i++)// {// printf("%d", user_task[i]);// }free(system_task);free(user_task);}10.将某字符变成小写后的某个字符#include<iostream>using namespace std;void TransferString(const char * pInputStr, long lInputLen, char * pOutputStr) {for(int i=0;i<lInputLen;i++){if(pInputStr[i]>='V'&& pInputStr[i]<='Z')pOutputStr[i]=pInputStr[i]+11;//('a' - 'A')-('V' - 'A');else if (pInputStr[i]>='A'&& pInputStr[i]<='U')pOutputStr[i]=pInputStr[i]+37;//('a' - 'A')+('F' - 'A');else{pOutputStr[i]=pInputStr[i];}}cout<<pOutputStr;}void main(){char *pInputStr="Axs3mWss";int n=0;while(pInputStr[n]!='\0')n++;long lInputLen=n+1;char *pOutputStr=(char *)malloc(sizeof(char)*(n+1));TransferString(pInputStr,lInputLen,pOutputStr);}11.链表的逆序#include<iostream>using namespace std;typedef struct tagListNode {int value;struct tagListNode *next;}ListNode;//要求实现函数:void converse(ListNode *head) {ListNode *p1,*p2,*p3;p1=head;p2=p1->next;while(p2){p3=p2->next;p2->next=p1;p1=p2;p2=p3;}head->next=NULL;head=p1;while(p1!=NULL){cout<<p1->value<<"->";p1=p1->next;}}void main(){ListNode *p,*head,*s;head=(ListNode*)malloc(sizeof(ListNode));p=head;int n=0,m=0;while(n<5){cin>>m;s=(ListNode*)malloc(sizeof(ListNode));s->value=m;p->next=s;p=s;n++;}head=head->next;p->next=NULL;converse(head);//p=head;//while(p!=NULL)// {// cout<<p->value<<"->";// p=p->next;//// }}12.单词统计#include<iostream>#include<string>using namespace std;struct node{//int number;int count;char a[10];};void WordStat(const char * pInputStr, char * pOutputHotWord, char * pOutputColdWord) {//cout<<sizeof(pOutputHotWord)<<endl;int i=0;char *pInputStr1=(char *)malloc(100*sizeof(char));strcpy(pInputStr1,pInputStr);//(char *)while(pInputStr1[i]!='\0'){if(pInputStr1[i]>='A' && pInputStr1[i]<='Z')pInputStr1[i]+=32;i++;}const char * split = ", .";struct node sb[10]={0};//*sb=(struct node *)malloc(10*sizeof(struct node));char *p={0};p=strtok (pInputStr1,split);int j=0;while(p!=NULL){ //sb[j].number=j;strcpy(sb[j].a,p);sb[j].count=0;j++;p=strtok (NULL,split);}for(int k=0;k<10;k++)for(int l=0;l<10;l++){if (strcmp(sb[k].a,sb[l].a)==0)sb[k].count+=1;}struct node max;struct node min;int dex1=0,dex2=0;max=sb[0];min=sb[0];for(int m=0;m<j;m++){if(sb[m].count>max.count){ max=sb[m];dex1=m;}else if((sb[m].count<min.count) &&(sb[m].count!=min.count) ) {min=sb[m];dex2=m;}}/*for(int m=0;m<j;m++){cout<<sb[m].count<<endl;cout<<sb[m].a;}*/strcpy(pOutputHotWord,sb[dex1].a);strcpy(pOutputColdWord,sb[dex2].a);cout<<"最高"<<pOutputHotWord;cout<<"最低"<<pOutputColdWord;}void main(){char pInputStr[100]={0};cin.get(pInputStr,100);char * pOutputHotWord=( char *)malloc(sizeof( char *)*100); char * pOutputColdWord=( char *)malloc(sizeof( char *)*100); memset(pOutputHotWord, 0, sizeof(pOutputHotWord)) ; memset(pOutputColdWord, 0, sizeof(pOutputHotWord)) ; WordStat(pInputStr, pOutputHotWord,pOutputColdWord);}13.字符串转换成规定数字转换成相应的数字已知:yi er san si wu liu qi ba jiu 分别对应,对一段只含有这几种字符的字符串进行转换,转换成相应的数字如:yiersansan:#include<iostream>#include<string>using namespace std;int WordStat(const char * pInputStr, char * pOutputWord){int i=0,d=0,k=0,sum=0;char *pInputStr1=(char *)malloc(100*sizeof(char));strcpy(pInputStr1,pInputStr);//(char *)char* sss[9] = {"yi", "er", "san", "si", "wu", "liu", "qi", "ba", "jiu"};while(pInputStr1[i]!='\0'){if(pInputStr1[i]=='y' || pInputStr1[i]=='e'|| pInputStr1[i]=='w'|| pInputStr1[i]=='q'|| pInputStr1[i]=='b')d=2;if(pInputStr1[i]=='l' || pInputStr1[i]=='j')d=3;if(pInputStr1[i]=='s'){ if(pInputStr1[i+1]=='a')d=3;if(pInputStr1[i+1]=='i')d=2;}for(int j=0;j<9;j++){if(strncmp(pInputStr1+i,sss[j],d)==0)k=j+1;}sum=sum*10+k;i+=d;}return sum;}void main(){char pInputStr[100]={0};cin.get(pInputStr,100);char * pOutputWord=( char *)malloc(sizeof( char *)*100);memset(pOutputWord, 0, sizeof(pOutputWord)) ;int transver= WordStat(pInputStr, pOutputWord);cout<<transver;}14.一个数组中比平均数大的个数#include<iostream>#include<string>using namespace std;int count(int p[], int n){int sum=0,m=0;for(int i=0;i<n;i++){sum+=p[i];}int aver=sum/n;for(int j=0;j<n;j++){if(p[j]>aver)m++;}return m;}void main(){cout<<"输入个数n"<<endl;int n;cin>>n;int *a=(int*)malloc(sizeof(int)*n);for(int i=0;i<n;i++){cin>>a[i];int m=count(a,n);cout<<m;}15. 求一个数组中第一大和第二大数#include<iostream>#include<string>using namespace std;void count(int p[], int n){int max=0,smax=0,k=0;for(int i=0;i<n;i++){if(p[i]>max){ max=p[i];k=i;}}for(int j=0;j<n ;j++){if(j==k)continue;if(p[j]>smax)smax=p[j];}cout<<"最大"<<max<<endl;cout<<"二大"<<smax<<endl;}void main(){cout<<"输入个数n"<<endl;int n;cin>>n;int *a=(int*)malloc(sizeof(int)*n);for(int i=0;i<n;i++)cin>>a[i];}count(a,n);}16.字符变成整数#include<iostream>#include<string>using namespace std;int chartoint(const char * pInputStr) {int i=0,d=0,k=0,sum=0;while (pInputStr[i]!='\0'){d=pInputStr[i]-'0';sum=sum*10+d;i++;}return sum;}void main(){char pInputStr[100]={0};cin.get(pInputStr,100);int transver= chartoint(pInputStr);cout<<transver+1;}17.整数变字符#include<iostream>using namespace std;void main(){int n,i=0;cin>>n;//int m=(int)sqrt(n);char p[50]={0},s[50]={0};while(n){p[i]=n%10+'0';i++;n/=10;}p[i]='\0';int m=strlen(p);//char *s=(char *)malloc(sizeof(char)*(m+1)); for (int j = 0; j < m; j ++)s[j]=p[m-1-j];s[m]='\0';cout<<s;}18.判断素数问题#include<iostream>#include<math.h>using namespace std;void main(){int n,i=0;cin>>n;//int m=(int)sqrt(n);for(i=2;i<n;i++){if(n%i==0)break;}if(i==n)cout<<"sushu"<<endl;else{cout<<"bushisushu"<<endl;}}19.1约瑟夫环#include<iostream>using namespace std;typedef struct LNode{int data;struct LNode*link;}LNode;void jos(int n,int k,int m){LNode *p,*curr,*r;p=(LNode*)malloc(sizeof(LNode));p->data=1;//注意我是从开始的奥p->link=p;curr=p;for(int i=2;i<=n;i++){LNode *s=(LNode*)malloc(sizeof(LNode));s->data=i;s->link=curr->link;curr->link=s;curr=s;}//==============================================循环链表的建立while(--k){ r=p;p=p->link;}//======================p指向序号为k的位置int w=m;while(n--){while(--m){r=p;p=p->link;}//======================p指向序号为k的之后的m位置上cout<<p->data<<"->";r->link=p->link;p=r->link;m=w;}}void main(){jos(9,1,5);}//5->1->7->4->3->6->9->2->8->19.2约瑟夫环(数学方法只能求出最后的胜利者的序号)#include<stdio.h>int main(){int n,m,i,s = 0;printf("N M =");scanf("%d%d",&n,&m);for(i = 2; i <= n; i++){s = (s + m) % i;}printf("n The winner is %dn",s+1);}19.3约瑟夫环(容器实现)#include<vector>#include<iostream>using namespace std;const int N = 9;const int M = 5;const int k = 1;int main(int argc, char* argv[]){vector<int> ring;for(int i=0; i<N;i++)ring.push_back(i+1);vector<int>::iterator iBegin = ring.begin();vector<int>::iterator iEnd;while ( !ring.empty() ){iEnd = ring.end();if(iBegin == iEnd )iBegin = ring.begin();for(int i=1;i<M;i++){iBegin++;if(iBegin >= iEnd)iBegin = ring.begin();}cout<<*iBegin<<endl;iBegin = ring.erase(iBegin);}}20.判断某个整数是回文。
2014年华为校园招聘java考题试卷及答案

2014年华为校园招聘java考题试卷及解答一单项选择题1.Java是从( )语言改进重新设计。
A.AdaB.C++C.PasacalD.BASIC解答:B2.下列语句哪一个正确( )A. Java程序经编译后会产生machine codeB. Java程序经编译后会产生byte codeC. Java程序经编译后会产生DLLD. 以上都不正确解答:B3.下列说法正确的有( )A. class中的constructor不可省略B. constructor必须与class同名,但方法不能与class同名C. constructor在一个对象被new时执行D. 一个class只能定义一个constructor解答:C4.提供Java存取数据库能力的包是( )A.java.sqlB.java.awtngD.java.swing解答:A5.下列运算符合法的是( )A.&&B.<>C.ifD.:=解答:A6.执行如下程序代码a=0;c=0; do{ --c; a=a-1; }while(a>0); 后,C的值是( )A.0B.1C.-1D.死循环解答:C7.下列哪一种叙述是正确的( )A. abstract修饰符可修饰字段、方法和类B. 抽象方法的body部分必须用一对大括号{ }包住C. 声明抽象方法,大括号可有可无D. 声明抽象方法不可写出大括号解答:D8.下列语句正确的是( )A. 形式参数可被视为local variableB. 形式参数可被字段修饰符修饰C. 形式参数为方法被调用时,真正被传递的参数D. 形式参数不可以是对象解答:A9.下列哪种说法是正确的( )A. 实例方法可直接调用超类的实例方法B. 实例方法可直接调用超类的类方法C. 实例方法可直接调用其他类的实例方法D. 实例方法可直接调用本类的类方法解答:D二、多项选择题1.Java程序的种类有( )A.类(Class)B.AppletC.ApplicationD.Servlet2.下列说法正确的有( )A. 环境变量可在编译source code时指定B. 在编译程序时,所能指定的环境变量不包括class pathC. javac一次可同时编译数个Java源文件D. javac.exe能指定编译结果要置于哪个目录(directory) 解答:BCD3.下列标识符不合法的有( )A.newB.$UsdollarsC.1234D.car.taxi解答:ACD4.下列说法错误的有( )A. 数组是一种对象B. 数组属于一种原生类C. int number=[]={31,23,33,43,35,63}D. 数组的大小可以任意改变解答:BCD5.不能用来修饰interface的有( )A.privateB.publicC.protectedD.static解答:ACD6.下列正确的有( )A. call by value不会改变实际参数的数值B. call by reference能改变实际参数的参照地址C. call by reference不能改变实际参数的参照地址D. call by reference能改变实际参数的内容解答:ACD7.下列说法错误的有( )A. 在类方法中可用this来调用本类的类方法B. 在类方法中调用本类的类方法时可直接调用C. 在类方法中只能调用本类中的类方法D. 在类方法中绝对不能调用实例方法解答:ACD8.下列说法错误的有( )A. Java面向对象语言容许单独的过程与函数存在B. Java面向对象语言容许单独的方法存在C. Java语言中的方法属于类中的成员(member)D. Java语言中的方法必定隶属于某一类(对象),调用方法与过程或函数相同解答:ABC9.下列说法错误的有( )A. 能被java.exe成功运行的java class文件必须有main()方法B. J2SDK就是Java APIC. Appletviewer.exe可利用jar选项运行.jar文件D. 能被Appletviewer成功运行的java class文件必须有main()方法三、判断题1.Java程序中的起始类名称必须与存放该类的文件名相同。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
样题-初级题:从考试成绩中划出及格线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、输入一串数,以','分隔,输出所有数中去掉最大值、最小值之后剩下的个数。
(其中最大值与最小值可能有多个)Smple input:3,3,5,3,6,9,7,9 Sample outPut: 38.29从5个人中选取2个人作为礼仪2、要从5个人中选取2个人作为礼仪,其中每个人的身高范围为160-190,要求2个人的身高差值最小(如果差值相同的话,选取其中最高的两人),以升序输出两个人的身高。
Smple input:161 189 167 172 188 Sample outPut: 188 1898.29验证括号是否匹配3、输入一串字符串,其中有普通的字符与括号组成(包括‘(’、‘)’、‘[’,']'),要求验证括号是否匹配,如果匹配则输出0、否则输出1.Smple input:dfa(sdf)df[dfds(dfd)] Smple outPut:08.31回文数1.判断回文数,是返回18.31将第一行中含有第二行中“23”的数输出并排序2.输入一行数字:123 423 5645 875 186523在输入第二行:23将第一行中含有第二行中“23”的数输出并排序结果即:123 423 1865238.31翻译电话号码3.将电话号码 one two 。
nine zero翻译成1 2 。
9 0中间会有double例如输入:OneTwoThree输出:123输入:OneTwoDoubleTwo输出:1222输入:1Two2 输出:ERROR输入:DoubleDoubleTwo 输出:ERROR第三题:有空格,非法字符,两个Double相连,Double位于最后一个单词都错误9.1.AM 将整数倒序输出,剔除重复数据输入一个整数,如12336544,或1750,然后从最后一位开始倒过来输出,最后如果是0,则不输出,输出的数字是不带重复数字的,所以上面的输出是456321和571。
如果是负数,比如输入-175,输出-571。
9.1.AM 大数相减输入两行字符串正整数,第一行是被减数,第二行是减数,输出第一行减去第二行的结果。
备注:1、两个整数都是正整数,被减数大于减数示例:输入:10000000000000011输出:1000000000000000注意大数用char a[] 存储,用%s接收,一位一位的运算。
注意a[0]里的正负号。
9.1.AM 判断if语句括号是否合法编程的时候,if条件里面的“(”、“)”括号经常出现不匹配的情况导致编译不过,请编写程序检测输入一行if语句中的圆括号是否匹配正确。
同时输出语句中出现的左括号和右括号数量,如if((a==1)&&(b==1))是正确的,而if((a==1))&&(b==1))是错误的。
注意if语句的最外面至少有一对括号。
提示:用堆栈来做。
输入:if((a==1)&&(b==1))输出:RIGTH 3 3输入:if((a==1))&&(b==1))输出:WRONG 3 49.1.PM字符串M化成以N为单位的段输入m个字符串和一个整数n, 把字符串M化成以N为单位的段,不足的位数用0补齐。
如 n=8 m=9 ,123456789划分为:1234567890000000123化为:123000009.1.PM整数化为2进制数,32位长度。
然后逆序输出整数化为2进制数,32位长度。
然后逆序输出9.1.PM背包01背包给定一个数,比如20然后再给定几个数字 1 3 5 7 81 3 5 7 80 0 1 1 1因为5+7+8=20*1、输入一个字符串,将其各个字符对应的ASCII值加5后,输出结果。
* 要求:该字符串只包含小写字母,若其值加5后的字符值大于'z',将其转换成从a开始的字符*/public class Demo1 {public static void main(String[] args) {Demo1 test = new Demo1();String data = "";String regex = "^[a-z]*$";if (data.matches(regex)) {System.out.println(test.getString(data));} else {System.out.println("输入的字符串不合法");}}public char[] getString(String data) {char[] arr = data.toCharArray();for (int i = 0; i < arr.length; i++) {if (arr[i] + 5 > 'z') {arr[i] = (char) (arr[i] - 21);} else {arr[i] = (char) (arr[i] + 5);}}return arr;}}/***2、求一个整形数组中元素的平均值,并统计其中大于和小于此平均值的元素的个数要求:输入:整形数组中的元素个数及各个元素输出:整型数组中元素的平均值,大于和小于此平均值的元素个数 */public class Demo2 {public static void main(String[] args) {int[] arr ={1,100};new Demo2().getavage(arr, 2);}public void getavage(int[] arr, int num){if(num==0){System.out.println("数组为空");}else{double avage = 0.0;int sum = 0;int count1=0;int count2=0;for(int i=0;i<arr.length;i++){sum += arr[i];}avage = (double)sum/num;for(int j =0;j<num;j++){if(arr[j]>avage){count1++;}else{count2++;}}System.out.println("平均值:"+avage);System.out.println("大于平均值的元素个数:"+count1);System.out.println("小于平均值的元素个数:"+count2);}}}3、手动输入一个存储整数的数组,要求输出数组里面的2个最大值例子:输入:1、2、5、9、84、3、2输出:84、9public class Demo3 {public static void main(String[] args) {Demo3 test = new Demo3();int[] arr = {1};test.getMaxValue(arr);}public void getMaxValue(int[] arr){int temp=0;if(arr.length<1){System.out.println("数组元素个数至少为2");}else{for(int i=0;i<arr.length-1;i++){for(int j=0;j<arr.length-1-i;j++){if(arr[i]>arr[i+1]){temp = arr[i];arr[i]=arr[i+1];arr[i+1]=temp;}}}System.out.print(arr[arr.length-1]+"、"+arr[arr.length-2]);}}}4、回文数字判断。
题目描述:有这样一类数字,他们顺着看和倒着看是相同的数。
如:121,656,2332等。
这样的数字称为回文数字。
编写一个函数,判断某数字是否是回文数字。
public String isPalidrome(String strIn)输入:strIn:整数,以字符串表示返回:true:是回文数字false:不是回文数字只需完成该函数功能算法,中间不需要任何IO的输入和输出示例:输入:strIn="121",返回:truepublic class Demo4 {public boolean isPalindrome(String str) {char[] arr = str.toCharArray();int len = arr.length;boolean b = false;for(int i = 0; i <= len/2; i++ ) {if(arr[i] != arr[len-i-1]) {break;}b=true;}}public static void main(String[] args) {String str = "223322";if(new Demo4().isPalindrome(str) ) {System.out.println("该字符串是回文字符串!");} else {System.out.println("该字符串不是回文字符串!");}}}6、手动输入一个字符串,仅限小写字母,统计并输出每个字符在字符串中出现的次数,并输出。