文档库 最新最全的文档下载
当前位置:文档库 › 华为2012校园招聘上机试题及答案

华为2012校园招聘上机试题及答案

华为2012校园招聘上机试题及答案
华为2012校园招聘上机试题及答案

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++;

else

return 2;

if(*p=='\0')

return 0;

}

else return 3;

}

else

return 1;

}

int main()

{

char num[]="87139a3887671";

int k=fun(num);

cout<

return 0;

}

1. 数组比较(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 函数返回:0

2)输入: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<

return 0;

}

2. 约瑟夫问题

?问题描述:

输入一个由随机数组成的数列(数列中每个数均是大于0的整数,长度已知),和初始计数值m。从数列首位置开始计数,计数到m后,将数列该位置数值替换计数值m,并将数列该位置数值出列,然后从下一位置从新开始计数,直到数列所有数值出列为止。如果计数到达数列尾段,则返回数列首位置继续计数。请编程实现上述计数过程,同时输出数值出列的顺比如:输入的随机数列为:3,1,2,4,初始计数值m=7,从数列首位置开始计数(数值3所在位置)

第一轮计数出列数字为2,计数值更新m=2,出列后数列为3,1,4,从数值4所在位置从新开始计数

第二轮计数出列数字为3,计数值更新m=3,出列后数列为1,4,从数值1所在位置开始计数第三轮计数出列数字为1,计数值更新m=1,出列后数列为4,从数值4所在位置开始计数

最后一轮计数出列数字为4,计数过程完成。

输出数值出列顺序为:2,3,1,4。

?要求实现函数:

void array_iterate(int len, int input_array[], int m, int output_array[ ])

【输入】 int len:输入数列的长度;

int intput_array[]:输入的初始数列

int m:初始计数值

【输出】 int output_array[]:输出的数值出列顺序

?示例

输入:int input_array[] = {3,1,2,4},int len = 4,m=7

输出:output_array[] = {2,3,1,4}

函数如下:

void fun(int len,int a1[],int len2,int a2[])

{ int n=0,i=-1,k=1,m=len2;

while(1){

for(int j=0;j

i=(i+1)%len; //注意这个是%,不要写成/

if(a1[i]!=0)

j++;

}

m=a1[i];

a2[n++]=a1[i];

a1[i]=0;

if(k==len)break;

k++;

}

}

3. 简单四则运算

?问题描述:

输入一个只包含个位数字的简单四则运算表达式字符串,计算该表达式的值

注: 1、表达式只含+, -, *, / 四则运算符,不含括号

2、表达式数值只包含个位整数(0-9),且不会出现0作为除数的情况

3、要考虑加减乘除按通常四则运算规定的计算优先级

4、除法用整数除法,即仅保留除法运算结果的整数部分。比如8/3=2。输入表达式保证无0作为除数情况发生

5、输入字符串一定是符合题意合法的表达式,其中只包括数字字符和四则运算符字符,除此之外不含其它任何字符,不会出现计算溢出情况

?要求实现函数:

int calculate(int len,char *expStr)

【输入】 int len: 字符串长度;

char *expStr: 表达式字符串;

【输出】无

【返回】计算结果

?示例

1)输入:char *expStr = “1+4*5-8/3”函数返回:19

2)输入:char *expStr = “8/3*3”函数返回:6

简化版的四则运算:没有括号,只有加减乘除四种运算

int fun(char a[],int len) //字符数组和字符数组的长度

{ int num[20];

char str[20];

int k1=0,k2=0;

int data=0;

for(int i=0;i

{ if(a[i]>='0'&&a[i]<='9')

num[k1++]=a[i]-'0';

if(a[i]=='-'||a[i]=='+')

str[k2++]=a[i];

if(a[i]=='*')

{num[k1-1]=num[k1-1]*(a[i+1]-'0');i++;}//遇见*,就运算,结果保存在数组中

if(a[i]=='/')

{ num[k1-1]=num[k1-1]/(a[i+1]-'0');i++;}

}

int temp=num[0];

int j=0; //两个数组只剩下数组和加减运算符

while(j

if(str[j]=='-')

temp=temp-num[j+1];

else if(str[j]='+')

temp=temp+num[j+1];

j++;

}

return temp;

}

int main()

{ har a[]="3*3+7+4/3";

int k=fun(a,9);

cout<

return 0;

}

函数实现2:中序表达式转换为后序表达式,使用算法实现

int isp(char c)

{ int p;

switch(c){

case'*':

case'/':p=1;break;

case'+':

case'-': p=0;break;

}

return p;

}

char* transf(int len,char a[],char b[])

{ int k=0;

stack s1;

for(int i=0;i

{ if(a[i]>='0'&&a[i]<='9')b[k++]=a[i];

else

{ if(s1.empty())s1.push(a[i]);

else while(isp(a[i])<=isp(s1.top()))

{b[k++]=s1.top();s1.pop();}

s1.push(a[i]);

}

}

while(s1.empty()){

b[k++]=s1.top();

s1.pop();

}

b[k]='\0';

return b;

}

void fun(char c,stack s2)

{ char p1,p2;

if(!s2.empty()){

p1=s2.top();s2.pop();

else pos=false;

cout<<"kongzhan"<

if(!s2.empty()){

p2=s2.top();s2.top();

else pos=false;

cout<<"kongzhan"<

if(pos=true)

switch(c){

case'+':s2.push(p1+p2);break;

case'-':s2.push(p2-p1);break;

case'*':s2.push(p1*p2);break;

case'/':s2.push(p2/p1);break;

}

}

void eval(char a[])

{ stack s2;

for(int i=len;i

switch(a[i]){

case'+':

case'-':

case'*':

case'/':fun(a[i],&s2);break;

default:s2.push(a[i]-'0');break;

}

}

}

int main()

{ char a[]="1+4*5-8/3";

int len=strlen(a);

char b[20];

char *q=transf(9,a,b);

cout<

return 0;

}

第五题:一副牌中发五张扑克牌给你:让你判断数字的组成:有以下几种情况:1:四条:即四张一样数值的牌(牌均不论花色) 2:三条带一对

3:三条带两张不相同数值的牌 4:两对 5:顺子包括10,J,Q,K,A 6:什么都不是 7:只有一对

思路:将数组排序,统计相同的数字的个数,再分情况讨论

void sort(int a[])

{ int temp;

for(int i=0;i<5;i++)

for(int j=0;j<5;j++)

if(a[i]>a[j])

{temp=a[i];a[i]=a[j];a[j]=temp;}

}

void test(int a[])

{ int *b=new int[5];

int k=1;

for(int i=0;i<5;i++)

{ b[i]=a[i];}

for(int j=0;j<4;j++)

if(a[j]==a[j+1])

k++;

if(k==4){

if(b[1]==b[3])

cout<<"四条"<

else

cout<<"三条带一对"<

}

if(k==3){

if(b[1]!=b[2]||b[2]!=b[3])

cout<<"三条带两个不同的牌"<

else

cout<<"两对"<

}

if(k==2)

cout<<"一对"<

if(k==1){

if(b[4]-b[0]==4&&b[4]-b[1]==3&&b[4]-b[2]==2&&b[4]-b[3]==1)

cout<<"顺子<

else

cout<<"什么都不是"<

}

}

int main()

{ int a[]={1,2,4,4,4};

test(a);

return 0;}

第二题:求两个数组的和差就是去掉两个数组中相同的元素然后将两个数组中的元素存放在一个新的数组中,按大小顺序排序

思路:将数组A和数组B分别进行排序,然后将A与B进行比较,重复的跳过去,不重复的赋给数组C,依次输出。

while(i < la && j < lb)

{ if(aa[i] < bb[j])

{

c[sub] = aa[i];

++sub;

++i;

}

else if(aa[i] > bb[j])

{ c[sub] = bb[j];

++sub;

++j;

}

else if(aa[i] == bb[j])

{ ++i;

++j;

} }

for(; i < la; ++i)

{c[sub] = aa[i];

++sub;

}

for(; j < lb; ++j)

{c[sub] = bb[j];

++sub;

}

四:逆序单链表

node *reverse(node *head)

{ node *p1,*p2,*p3;

p1=head;

p2=head->next;

while(p2){

p3=p2->next;

p2->next=p1;

p1=p2;

p2=p3;

}

head->next=NULL;

head=p1;

return head;

}

2. 将一个字符串的元音字母复制到另一个字符串,并排序(30分)

问题描述:有一字符串,里面可能包含英文字母(大写、小写)、数字、特殊字符,现在需要实现一函数,将此字符串中的元音字母挑选出来,存入另一个字符串中,并对字符串中的字母进行从小到大的排序(小写的元音字母在前,大写的元音字母在后,依次有序)。

说明:1、元音字母是a,e,i,o,u,A,E,I,O,U。 2、筛选出来的元音字母,不需要剔重;最终输出的字符串,小写元音字母排在前面,大写元音字母排在后面,依次有序。

要求实现函数:void sortVowel (char* input, char* output);

using namespace std;

void fun(char a[],char s[]) //提取元音字母,放入数组

{ int i=0,n=0;

while(a[i]!='\0'){

if(a[i]=='a'||a[i]=='e'||a[i]=='i'||a[i]=='o'||a[i]=='u')

s[n++]=a[i];

else if

(a[i]=='A'||a[i]=='E'||a[i]=='I'||a[i]=='O'||a[i]=='U')

s[n++]=a[i];

i++;

}

char temp; //将数组排序

for(int i=0;i

for(int j=0;j

if(s[j]>s[j+1])

{temp=s[j];s[j]=s[j+1];s[j+1]=temp;}

int k=0; //定位大写字母的最后位置

while(s[k]>='A'&&s[k]<='Z'){

k++;

}

for(int j=0;j

cout<

char *p=new char[20]; //将字符串变换位置,输出。

char *q=p;

for(int i=k;i

{*p=s[i];p++;}

for(int j=0;j

{*p=s[j];p++;}

*p='\0';

cout<

}

int main()

{ char str[]="HaJsdStOoAOeINaPQaWEiAIiO";

char s[20];

fun(str,s);

return 0;

}

3. 身份证号码合法性判断

我国公民的身份证号码特点如下:

1、长度为18位;

2、第1~17位只能为数字;

3、第18位可以是数字或者小写英文字母x。

4、身份证号码的第7~14位表示持有人生日的年、月、日信息。

例如:511002 19880808 0111或511002 198********x。

请实现身份证号码合法性判断的函数。除满足以上要求外,需要对持有人生日的年、月、日信息进行校验。年份大于等于1900年,小于等于2100年。需要考虑闰年、大小月的情况。所谓闰年,能被4整除且不能被100整除或能被400整除的年份,闰年的2月份为29天,非闰年的2月份为28天。其他情况的合法性校验,考生不用考虑。

函数返回值:

1)如果身份证号合法,返回0;

2)如果身份证号长度不合法,返回1;

3)如果身份证号第1~17位含有非数字的字符,返回2;

4)如果身份证号第18位既不是数字也不是英文小写字母x,返回3;

5)如果身份证号的年信息非法,返回4;

6)如果身份证号的月信息非法,返回5;

7)如果身份证号的日信息非法,返回6(请注意闰年的情况);

要求实现函数:

int verifyIDCard(char* input)

示例

1)输入:”511002 111222”,函数返回值:1;

2)输入:”511002 abc123456789”,函数返回值:2;

3)输入:”511002 198********a”,函数返回值:3;

4)输入:”511002 188808081234”,函数返回值:4;

5)输入:”511002 198813081234”,函数返回值:5;

6)输入:”511002 198808321234”,函数返回值:6;

7)输入:”511002 1989 0229 1234”,函数返回值:7;

8)输入:”511002 198808081234”,函数返回值:0;

{ int year=0,month=0,day=0;

if((strlen(str)-1)<18) //1

{ for(int i=0;i<18;i++)

{ if(str[i]>='0'&&str[i]<='9') //2

;

else return 2;

}

if(str[17]=='x'||(str[17]>='0'&&str[17]<='9'))//3

{for(int i=6;i<10;i++)

year=year*10+str[i]-'0';

if(year>1900&&year<2100)//4

{ for(int i=10;i<12;i++)

month=month*10+str[i]-'0';

if(month>0&&month<=12)//5

{ for(int i=12;i<14;i++)

day=day*10+str[i]-'0';

if(day<=31)//6

{ if(year%4!=0&&month==2&&day<=28)

return 0;

else if(year%4==0&&month==2&&day<29)

return 0;

else if(year%4!=4&&month!=2&&day<31)

return 0;

else return 6;

}

else return 6;

}

else return 5;

}

else return 4;

}

else return 3;

}

else return 1;

}

int main()

{ char a[]="340621198608377817";

int k=fun(a);

cout<

return 0;

}

第二题:比较一个数组的元素是否为回文数组

判断是否是回文数组:

{

int n=strlen(a);

int i=0,j=n-1;

while(i

if(a[i]!=a[j])

return false;

i++;j--;

}

return true;

}

第三题:求两个数组的和差:就是去掉两个数组中相同的元素然后将两个数组中的元素存放在一个新的数组中且数组A中元素要在B数组元素之前

思路:利用循环比较,将相同的数字的标记为0,再赋给数组C

int main()

{ int a[]={1,3,5,7,9,12,13};

int s[]={1,3,5,6,7,8,9};

int len1=sizeof(a)/sizeof(int);

int len2=sizeof(s)/sizeof(int);

for(int i=0;i

for(int j=0;j

if(a[i]==s[j])

{a[i]=0;s[j]=0;}

int t[30];

int k=0,i=0,j=0;

while(i

if(a[i]!=0)

t[k++]=a[i];

i++;

}

while(j

if(s[j]!=0)

t[k++]=s[j];

j++;

}

for(int i=0;i

cout<

return 0;

}

字符串计算

1、选秀节目打分,分为专家评委和大众评委,score[] 数组里面存储每个评委打的分数,judge_type[] 里存储与score[] 数组对应的评委类别,judge_type == 1,表示专家评委,judge_type == 2,表示大众评委,n表示评委总数。打分规则如下:专家评委和大众评委的分数先分别取一个平均分(平均分取整),然后,总分= 专家评委平均分* 0.6 + 大众评委* 0.4,总分取整。如果没有大众评委,则总分= 专家评委平均分,总分取整。函数最终返回选手得分。

int cal_score(int score[], int judge_type[], int n)

{ int sum1=0,sum2=0,avg1=0,avg2=0;

int m=0,k=0;

for(int i=0;i

if(judge_type[i]==1)

{sum1=sum1+score[i];m++;}

if(judge_type[i]==2)

{sum2=sum2+score[i];k++;}

}

avg1=sum1/m;avg2=sum2/k;

return (int)(avg1*0.6+avg2*0.4);

}

int main()

{ int input[]={3,6,1,9,7,8};

int output[]={1,1,2,1,2,2};

int n=sizeof(input)/sizeof(int);

int p=cal_score(input,output,n);

cout<

return 0;

}

2、给定一个数组input[] ,如果数组长度n为奇数,则将数组中最大的元素放到output[] 数组最中间的位置,如果数组长度n为偶数,则将数组中最大的元素放到output[] 数组中间两个位置偏右的那个位置上,然后再按从大到小的顺序,依次在第一个位置的两边,按照一左一右的顺序,依次存放剩下的数。

例如:input[] = {3, 6, 1, 9, 7} output[] = {3, 7, 9, 6, 1}; input[] = {3, 6, 1, 9, 7, 8} output[] = {1, 6, 8, 9, 7, 3}

函数接口void sort(int input[[, int n, int output[])

using namespace std;

void sort(int input[],int n,int output[])

{ int i=0,j=n-1;

int temp;

for(int i=0;i

for(int j=0;j

{ if(input[j]>input[j+1])

{temp=input[j];input[j]=input[j+1];input[j+1]=temp;}

}

int k=0;

i=0;j=n-1;

while(i

output[i++]=input[k++];

output[j--]=input[k++];

}

cout<

}

int main()

{ int input[]={3,6,1,9,7,8};

int output[20];

sort(input,6,output);

return 0;

}

3、操作系统任务调度问题。操作系统任务分为系统任务和用户任务两种。其中,系统任务的优先级< 50,用户任务的优先级>= 50且<= 255。优先级大于255的为非法任务,应予以剔除。现有一任务队列task[],长度为n,task中的元素值表示任务的优先级,数值越小,优先级越高。函数scheduler实现如下功能,将task[] 中的任务按照系统任务、用户任务依次存放到system_task[] 数组和user_task[] 数组中(数组中元素的值是任务在task[] 数组中的下标),并且优先级高的任务排在前面,数组元素为-1表示结束。task[] = {0, 30, 155, 1, 80, 300, 170, 40, 99} system_task[] = {0, 3, 1, 7, -1} user_task[] = {4, 8, 2, 6, -1}

函数接口:

void scheduler(int task[], int n,int system_task[], int user_task[])

{ int *p = new int[n];

int i,j,temp;

int k1=0,k2=0;

for(i = 0;i

{ p[i] = i;}

for(i = 0;i

for(j=0;j

{ if(*(task+p[j])>*(task+p[j+1]))

{temp = p[j];p[j] = p[j+1];p[j+1] = temp; //此处是排下标

}}

for(j=0;j

{if(*(task+p[j])<50)

system_task[k1++] = p[j];

if(*(task+p[j])>=50 && *(task+p[j])<=255)

user_task[k2++] = p[j];

}

system_task[k1] = -1;

user_task[k2] = -1;

}

地区2:单链表的操作:排序,插入,删除,逆序,创建。

struct node{

int data;

struct node* next;

};

node *creat()

{ node *head,*p,*s;

head=new node[1];

p=head; //p只是定义,并没有分配空间,

int k;

while(cin>>k) { //创建单链表

s=new node[1];

s->data=k;

p->next=s;

p=s;

}

head=head->next; //开始的的时候head是表头节点,现在是第一个节点p->next=NULL;

return head;

}

node *reverse(node *head)

{ node *p1,*p2,*p3;

p1=head;

p2=head->next;

while(p2){

p3=p2->next;

p2->next=p1;

p1=p2;

p2=p3;

}

head->next=NULL;

head=p1;

return head;

}

node *del(node *head,int num)

{ node *p,*s;

p=head;

while(p->data!=num&&p->next!=NULL)

{s=p;p=p->next;}

if(p->data==num){

if(p==head)

{head=p->next;delete p;}

else

{s->next=p->next;delete p;}

}

else

cout<<"未找到要删除的节点"<

return head;

}

node *insert(node *head,int num)//要插入和删除的时候要考虑判断特殊位置点{ node *p,*s,*t;

p=head;

t=new node[1];

t->data=num;

while(p->datanext!=NULL)

{s=p;p=p->next;}

if(num<=p->data){

if(p==head)

{t->next=p;head=s;}

else

{t->next=p;s->next=t;}

}

else//把插入点定位在了链尾

{p->next=t;t->next=NULL;}

return head;

}

node *sort(node* head)

{ node *p; int temp;

int n=sizeof(head)/sizeof(node);

if(head==NULL&&head->next==NULL)

return head;

p=head;

for(int i=0;i

p=head;

for(int j=0;j

if(p->data>p->next->data)

{ temp=p->data;

p->data=p->next->data;

p->next->data=temp;

}}}

return head;

}

栈的基本操作:

struct list{

int data;

struct node *next;

}*node;

void initstack(node &top)

{

top=NULL;

}

void push(node &top,int num) { node *p;

p=new node;

p->data=num;

p->next=top;

top=p;

}

void pop(node &top)

{ node *p=top;

int n=top->data;

top=top->next;

cout<

delete p;

}

int Isempty(node &top)

{

return top==NULL;

}

改进后的冒泡排序:

oid maopao(int *s,int n)

{ int i=1,j,b=1;

int temp;

while(b){

b=0;

for(j=n-i-1;j>i;j--)

if(s[j]

{

b=1;

temp=s[j];

s[j]=s[j-1];

s[j-1]=temp;

}

for(j=i;j

if(s[j]>s[j+1])

{ b=1;

temp=s[j];

s[j]=s[j+1];

s[j+1]=temp;

}

i++;

}

}

扫描数组,求出最大的增量长度:

int main()

{ int a[]={7,2,3,4,5,6,8};

int n=7;

int max=1,len=1;

for(int i=1;i

{

if(a[i]>=a[i-1])

{ len++;

continue;//跳出本次循环,继续以下的部分

}

if(max

max=len;

len=1;

}

cout<

return 0;

}

扫描整数序列,求出最大长度子序列:

思路:定义两个游标i j分别在数组的左右,从两边收缩,计算i j之间数组的总和,然后比较,求出最大的记录,并将此时的i j 记录下来。

int main()

{ int s[]={1,20,-3,49,59,10,30,20,-41,90,-2,-30,60.-29};

int n=sizeof(s)/sizeof(int);

int i,k,j,a,b,num,max=0;

for( i=0;i

for( j=n-1;j>=i;j--)

{ num=0;

for( k=i;k<=j;k++)

num=num+s[k];

if(max

{

max=num;

a=i; b=j;

}

}

for(int m=a;m<=b;m++)

cout<

return 0;

}

直接插入排序:

void insertsort(int a[],int n)

{ int x,j;

x=a[i];

for( j=i-1;j>=0&&x>a[j];j--)

a[j+1]=a[j];

a[j+1]=x;

}

提取字符串中的数字:

在字符串"ab00cd+123fght456-253.005fgh"中提取的字符是0,123,456,253,5。

void fun( char str[], int outArray[])

{ char *p=str;

int count=0,value=0;

while(*p!='\0'){

if(*p<='0'&&*p>='9'){

value=0;

while(*p<='0'&&*p>='9'){

value=value*10+(*p-'0');

p++; }

outArray[count++]=value;

}

p++;}}

数字转换成字符串:

int main()

{ char str[20],temp[20];

int i=0,j=0;

int num=1234567;

while(num>0){

str[i]=num%10+'0';

num=num/10;

i++;

}

i--;

while(i>=0){

temp[j++]=str[i--];

}

temp[j]='\0';

cout<

return 0;

}

如下输入方法:第一行输入要输入字符的行数N,接下输入N行字符,统计字符中特定字符的个数。方法如下:

int main()

{ char ch;

int N,num=0;cin>>N; //定义输入的行数

getchar(); //输入的N行字符

while(1){ //记住控制方法

ch=getchar(); //这是单个字符

if(ch=='a')num++;

if(ch=='\n')break;

} }

cout<

return 0;

}

大数的运算:

void fun(char *num1,char *num2,char *result)

{ int i=strlen(num1)-1,j=strlen(num2)-1;

char *p=num1;

char *q=num2;

int n=0,k=0;

if(p[0]!='-'&&q[0]!='-'){

//两个正数相加,两个负数相加一样,就是在result[n]中再加上一个‘-’,再反序输出。

while(i>=0&&j>=0){

result[n++]=((p[i]-'0')+(q[j]-'0')+k)%10+'0';

k=((p[i]-'0')+(q[j]-'0'))/10;

i--;j--;

}

while(i>=0){

result[n++]=((p[i]-'0')+k)%10+'0';

k=((p[i]-'0')+k)/10;

i--;

}

while(j>0){

result[n++]=((q[j]-'0')+k)%10+'0';

k=((q[j]-'0')+k)/10;

i--;

}

if(k==1)

{result[n++]=1;} //如果是两个负数相加,加上result[n++]='-';

result[n]='\0';

}

}

求字符串中最大的回文长度:

void fun(char a[])

{

int len=strlen(a);

int i=0,j=len-1,len2=0; //len2是回文的一半长度

char *p,*q;

int max=0,pos1=0,pos2=0;

for(i=0;i

for(j=len-1;j>i;j--)

{ p=&a[i];q=&a[j];

while(p

{

if(*p==*q)

{len2++;p++;q--;}

Else //上式中,如若不成立,保留下来的len的值可能很大,要将其变成

0,以便继续使用。

{ len=0,break;}

}

if(max

{max=len2;pos1=i;pos2=j;}

len2=0;

}

while(pos1<=pos2)

cout<

}

int main()

{

char a[]="ddaffafFEaabbccccbbaabsgbsbgsbg";

fun(a);

return 0;

}

求一串字符串中出现次数最多的单词:

void fun(char a[])

{ char str[100][100];

char temp[200];

int value[200];

int k1=0,k2=0,k3=0;

int i=0,j=0;

while(a[i]!='\0'){

if(i==0)

{ while(a[i]!=' ')

temp[k3++]=a[i++];

temp[k3]='\0'; k3=0;

strcpy(str[k1],temp);

value[k1++]=1;

}

001-华为公司应届生试题-研发软件类(第1套)

说明:本份试题满分100分,完成时间为90分钟。请将答案写在答题纸上,不要写在试卷上,答题完毕将试卷、答题纸和草稿纸一起上交。 一、单选题(共20题计40分) 1、输入序列为ABC,可以变为CBA时,经过的栈操作为() A. push,pop,push,pop,push,pop B. push,push,push,pop,pop,pop C. push,push,pop,pop,push,pop D. push,pop,push,push,pop,pop 2.线程和进程最主要的区别在于 A. 进程是UNIX下的概念,线程是Windows下的概念 B. 进程的效率比线程低 C. 在进程中可以创造线程,但线程中不能生成进程 D. 进程由自己独立的运行空间,线程的运行空间是共享的 3. IP路由发生在TCP/IP体系结构中的哪一层 A. 物理层 B. 数据链路层 C. 网络层 D. 传输层 4. 假设一个IP主机地址为而子网掩码为那么该主机的网络号为_________ 5.120 C 、遍历是树形结构的一种重要运算。若已知一棵二叉树的前序序列是BEFCGDH,中序序列是FEBGCHD,则它的后序序列必是______。供选择的答案 A) E F G H B C D B) F E G H D C B C) B C D E F G H D) E F G C H D B 6、五层完全二叉树有___个节点。 A. 16 B. 32 C. 31 D. 33 7、用链接方式存储的非循环单向队列,在进行删除运算时,_____。 A) 头、尾指针可能都要修改 B) 仅修改头指针 C) 仅修改尾指针 D) 头、尾指针都要修改 8、如果在排序过程中,每次均将一个待排序的记录按关键字大小加入到前面已经有序的子表中的适当位置,则该排序方法称为() A.插入排序B.归并排序 C.冒泡排序D.堆排序 9、对下列关键字序列用快速排序法进行排序时,速度最快的情形是:( ) (A){25、23、30、17、21、5、9} (B){21、9、17、30、25、23、5} (C){21、25、5、17、9、23、30} (D){5、9、17、21、23、25、30}

华为笔试题(答案)

笔试题 选择题 1、以下程序的输出结果是: #include int main() { int n =4; while (n--) { printf("%d ", --n); } printf("\r\n"); return0; } 答案:2 0 2、设有以下宏定义: #define N 4 #define Y(n) ((N+1)*n) 则执行语句:Y(5+1)为: 答案:26 3、 enum ENUM_A { x1, y1, z1 =5, a1, b1 }; enum ENUM_A enumA = y1; enum ENUM_A enumB = b1; 请问enumA和enumB的值是多少?答案:1,7

4、若有函数max(a,b),并且函数指针变量p已经指向函数,当调用该函数时正确的调用方法是: 答案:(*p)(a,b)或者p(a,b) 5、对栈S进行下列操作:push(1), push(5), pop(), push(2), pop(), pop(), 则此时栈顶元素是: 答案:没有元素,栈空。 6、在一个32位的操作系统中,设void *p = malloc(100),请问sizeof(p)的结果是: 答案:32位操作系统的寻址大小是32位,即4字节。 7、若已定义: int a[9], *p = a;并在以后的语句中未改变p的值,不能表示a[1]地址的表达式是: A)p+1 B)a+1 C) a++ D) ++p 答案:C 8、设有如下定义: unsigned long pulArray[] = {6,7,8,9,10}; unsigned long *pulPtr; 则下列程序段的输出结果是什么? pulPtr = pulArray; *(pulPtr + 2) += 2; printf("%d, %d\r\n", *pulPtr, *(pulPtr + 2)); A) 8, 10 B) 6, 8 C) 7, 9 D) 6, 10 答案:D 9、以下程序运行后,输出结果是什么? void main() { char *szStr = "abcde"; szStr += 2; printf("%1u\r\n", szStr); return; } A) cde B) 字符c的ASCII码值C) 字符c的地址D) 出错 答案:C

最全的华为校园招聘笔试题

最全的华为校园招聘笔试题 华为笔试 1.局部变量能否和全局变量重名? 答:能,局部会屏蔽全局。要用全局变量,需要使用 “::“ 局部变量可以与全局变量同名,在函数内引用这个变量时,会用到同名的局部变量,而不会用到全局变量。对于有些编译器而言,在同一个函数内可以定义多个同名的局部变量,比如在两个循环体内都定义一个同名的局部变量,而那个局部变量的作用域就在那个循环体内。 2.如何引用一个已经定义过的全局变量? 答:extern 可以用引用头文件的方式,也可以用extern关键字,如果用引用头文件方式来引用某个在头文件中声明的全局变理,假定你将那个变写错了,那么在编译期间会报错,如果你用extern方式引用时,假定你犯了同样的错误,那么在编译期间不会报错,而在连接期间报错。 3.全局变量可不可以定义在可被多个.C文件包含的头文件中?为什么? 答:可以,在不同的C文件中以static形式来声明同名全局变量。 可以在不同的C文件中声明同名的全局变量,前提是其中只能有一个C文件中对此变量赋初值,此时连接不会出错。

4.语句for( ;1 ;)有什么问题?它是什么意思? 答:无限循环,和while (1)相同。 5.do……while和while……do有什么区别? 答:前一个循环一遍再判断,后一个判断以后再循环。 6.请写出下列代码的输出内容#i nclude 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.指针在任何情况下都可进行>, =, =MAX_SRM) return (NULL_SRM); else return SRM_no; } 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;Inext = NULL; p=h; for(i=0;inext = s; printf(“Please input the information

华为校招·硬件技术工程师机考试题及答案

精品文档 1.(判断题)DRAM上电时存储单元的内容是全0,而Flash上电时存储单元的内容是全1。(4分) A.正确 B.错误 FLASH可保存 2.(判断题)眼图可以用来分析高速信号的码间干扰、抖动、噪声和衰减。(4分) A.正确 B.错误 3.(判断题)以太网交换机将冲突域限制在每个端口,提高了网络性能。(4分) A.正确 B.错误 4.(判断题)放大电路的输出信号产生非线性失真是由于电路中晶体管的非线性引起的。(4分) A.正确 B.错误 5.(判断题)1的8位二进制补码是0000_0001,-1的8位二进制补码是1111_1111。(4分) A.正确 B.错误 6.(判断题)洗衣机,电冰箱等家用电器都使用三孔插座,是因为如果不接地,家用电器是不能工作的。(4分) A.正确 B.错误 7.(判断题)十进制数据0x5a与0xa5的同或运算结果为:0x00。(4分) A.正确 B.错误 8.(判断题)硅二极管的正向导通压降比锗二极管的大(4分) A.正确 B.错误 9.(单选题)一空气平行板电容器,两级间距为d,充电后板间电压为u。然后将电源断开,在平板间平行插入一厚度为d/3的金属板。此时电容器原板间电压变为(4分) A.U/3 B.2U/3 C.3U/4 D.不变但电容的大小不是由 Q(带电量)或U(电压)决定的,即: C=εS/4πkd。其中,ε是一个常数, S为电容极板的正对面积, d为电容极板的距离, k则是静电力常量。而常见的平行板电容器 电容为C=εS/d.(ε为极板间介质的介电常数, S 为极板面积, d为极板间的距离。) 3电容器的电势能计算公式: E=CU^2/2=QU/2 10.(单选题)8086CPU内部包括哪些单元(4分) A.ALU,EU B.ALU,BIU C.EU,BIU D.ALU,EU,BIU 80x86从功能上分执行单元EU(Execution Unit),和总线接口单元BIU(Bus Interface Unit),执行单元由8个16位通用寄存器,1个16位标志寄存器,1个16位暂存寄存器,1个16位算术逻辑单元ALU及EU控制电路组成。 总线接口单元由4个16位段寄存器(CS,DS,SS,ES),1个16位的指令指针寄存器,1个与EU通信的内部暂存器,1个指令队列,1个计算20位物理地址的加法器∑及总线控制电路构成。 11.(单选题)为了避免50Hz的电网电压干扰放大器,应该用那种滤波器:(4分) A.带阻滤波器 B.带通滤波器 C.低通滤波器 D.高通滤波器 12.(单选题)关于SRAM和DRAM,下面说话正确的是:(4分) A.SRAM需要定时刷新,否则数据会丢失 B.DRAM使用内部电容来保存信息 C.SRAM的集成度高于DRAM D.只要不掉点,DRAM内的数据不会丢失 【解析】SRAM和DRAM都是随机存储器,机器掉电后,两者的信息都将丢失。它们的最大区别就是:DRAM是用电容有无电荷来表示信息0和1,为防止电容漏电而导致读取信息出错,需要周期性地给电容充电,即刷新;而SRAM是利用触发器的两个稳态来表示信息0和1,所以不需要刷新。另外,SRAM 的存取速度比DRAM更高,常用作高速缓冲存储器Cache。

华为硬件笔试题(最新版)

一选择 13 个题目,没有全部抄下来,涉及的课程有电路,模拟电路,数字电路,信号与系统,微机原理 ,网络,数字信号处理 有关于 1.微分电路 2.CISC,RISC 3.数据链路层 二填空 10 个题目,没有全部抄下来,涉及的课程有电路,模拟电路,数字电路,信号与系统,微机原理 ,网络,数字信号处理 有关于 1.TIC6000 DSP 2.二极管 3.RISC 4.IIR 三简答 1.x(t)的傅立叶变换为 X(jw)=$(w)+$(w-PI)+$(w-5) h(t)=u(t)-u(t-2) 问: (1),x(t)是周期的吗?

(2),x(t)*h(t)是周期的吗? (3),两个非周期的信号卷积后可周期吗? 2.简述分组交换的特点和不足 四分析设计 1.波形变换题目 从正弦波->方波->锯齿波->方波,设计电路 2.74161 计数器组成计数电路,分析几进制的 3.用 D 触发器构成 2 分频电路 4.判断 MCS-51 单片机的指令正确还是错误,并指出错误原因 (1) MUL R0,R1 (2) MOV A,@R7 (3) MOV A,#3000H (4) MOVC @A+DPTR,A (5) LJMP #1000H () 5.MCS-51 单片机中,采用 12Mhz 时钟,定时器 T0 采用模式 1(16 位计数器),请问在下面程序中, p1.0 的输出频率 MOV TMOD,#01H SETB TR0 LOOP:MOV TH0,#0B1H MOV TL0,#0E0H

LOOP1:JNB TF0,LOOP1 CLR TR0 CPL P1.0 SJMP LOOP

华为校招问题回答汇总--6.22修订版

华为校招问题汇总 6月22日 注:有任何问题可以在群内@当日值班管理员。请不要私信管理员,私信一律不回复;同时,没有修改备注的同学无权提问。 一、实习相关 1.华为今年的暑期实习还可以补录吗? ANS:华为实习生招聘已结束,不能再补录。 2.实习的时候招硬件非常少,这次呢? ANS:软硬件都是主流招聘岗位。 3.已经通过面试被录为暑期实习生,由于特殊情况而去不了,会不会影响9月 份的正式应聘呢? ANS:不会影响到9月的校招 4.想请问您一下华为秋季有没有计划招聘现在研一的的实习生?就是研二出 去实习的。 ANS:没有计划了,实习生是统一在5月份面试的。 5.四月底参加了华为暑期实习生招聘上机考试并通过,接着做完性格测,说到 5月6号左右会通知面试,我们几个同学都没有收到面试通知,难道都是性格测试出问题了吗? ANS:有可能性格测试没过,请耐心等通知。 6.已拿到实习岗位,还能参加7月份的机试吗? ANS:不用参加,除非你想证明实力,为特殊起薪 7.实习后会有秋季招聘的绿色通道吗?实习生留到华为的比例有多大呢? ANS:实习是实习,会有实习成绩,根据实习成绩来决定是否有绿色通道。 二、机试相关 1.希望了解一些软件考试方面的信息 ANS:7月上旬机试,你们等艾庆兴,他会来西工大讲的。 (ps.给刚才提到的艾庆兴同学做个简介,该同志人送外号“艾神”,做过14届所有的华为机试题,曾经获得某编程大赛全国冠军,认真听他的讲座可以提高机试通过率哦~) 2.7月份的机试是提前批还是正式秋招的机试?是软件类还是硬件 类? ANS:7月份是正式的秋招机试,软件类招聘第一个环节,希望有意向的同学可以安排好时间。时间定在7月中上旬。 3.7月机试要是没过之后的还可以参加吗? ANS:7月份的肯定比9月份的简单,有可能没有9月的软件机试了。 4.请问7月机试时间具体是几号? ANS: 7月的机试,有7月上旬1次,中旬1次 5.人在杭州能不能申请在杭州的机试面试?

2020华为校园招聘笔试真题题库精选答案解析(南研所)

2020华为校园招聘笔试真题题库精选答案解析(南研所) 1 局部变量能否和全局变量重名 2 如何引用一个已经定义过的全局变量 3 全局变量可不可以定义在可被多个.C文件包含的头文件中为什么 4 语句for( ;1 ;)有什么问题它是什么意思 5 do……while和while……do有什么区别 6 请写出下列代码的输出内容 以下是引用片段: #include 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; } 7 static全局变量与普通的全局变量有什么区别static局部变量和普通局部变量有什么区别static函数与普通函数有什么区别? 8 程序的局部变量存在于()中,全局变量存在于()中,动态申请数据存在于()中。 9 设有以下说明和定义:

typedef union {long i;int k[5]; char c;} DATE; struct data { int cat;DATE cow; double dog;} too; DATE max; 则语句printf("%d",sizeof(struct date)+sizeof(max));的执行结果是:_______ 10 队列和栈有什么区别? 写出下列代码的输出内容 以下是引用片段: #include int inc(int a) { return(++a); } int multi(int*a,int*b,int*c) { return(*c=*a**b); } typedef int(FUNC1)(int in); typedef int(FUNC2) (int*,int*,int*); void show(FUNC2 fun,int arg1, int*arg2) { INCp=&inc;

华为笔试试题大全

华为笔试试题大全 (陈远跃/整理) 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输出该数值,直至全部输出。写出C程序。 循环链表,用取余操作做 14.不能做switch()的参数类型是: switch的参数不能为实型。 上海华为的一道关于指针方面的编程题 int A[nSize],其中隐藏着若干0,其余非0整数,写一个函数int Func(int* A, int nSize),使A把0移至后面,非0整数移至数组前面并保持有序,返回值为原数据中第一个元素为0的下标。(尽可能不使用辅助空间且考虑效率及异常问题,注释规范且给出设计思路) 华为笔试题含答案 [软件工程题] 写一个程序, 要求功能:求出用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<

华为2012校园招聘软件上机笔试题+准确答案

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='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<=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)

华为笔试题done

试题 选择题 1、以下程序的输出结果是: 2 0 \r\n 正确值2 0 \r转义符:回车,\n转义符:换行 #include int main() { int n = 4; while (n--) { printf("%d ", --n); } printf("\r\n"); return 0; } 2、设有以下宏定义: #define N 4 #define Y(n) ((N+1)*n) 则执行语句:Y(5+1)为:26 如果#define Y(n) ((N+1)*(n)) 则Y(5+1) 为30 3、

enum ENUM_A { x1, y1, z1 = 5, a1, b1 }; enum ENUM_A enumA = y1; enum ENUM_A enumB = b1; 请问enumA和enumB的值是多少?1 7 x1=0,y1=1,a1=6,b1=7 4、若有函数max(a,b),并且函数指针变量p已经指向函数,当调用该函数时正确的调用方法是:(*p)(,) 5、对栈S进行下列操作:push(1), push(5), pop(), push(2), pop(), pop(), 则此时栈顶元素是: NULL 6、在一个32位的操作系统中,设void *p = malloc(100),请问sizeof(p)的结果是:4

7、若已定义: int a[9], *p = a;并在以后的语句中未改变p的值,不能表示a[1]地址的表达式是: C a的值不能改变 A)p+1 B)a+1 C) a++ D) ++p 8、设有如下定义: unsigned long plArray[] = {6,7,8,9,10}; unsigned long *pulPtr; 则下列程序段的输出结果是什么?D pulPtr = plArray; *(pulPtr + 2) += 2; printf("%d, %d\r\n", *pulPtr, *(pulPtr + 2)); A) 8, 10 B) 6, 8 C) 7, 9 D) 6, 10 9、以下程序运行后,输出结果是什么? C void main() { char *szStr = "abcde"; szStr += 2; printf("%1u\r\n", szStr); return; } A) cde B) 字符c的ASCII码值C) 字符c的地址D) 出错

(整理)华为笔试题.

华为2011第一次笔试题目总结:单选20,多选10,改错3,编程2 有数据结构、网络、操作系统、数据库 一、单项选择题(4选1) 1.如果有N个节点用二叉树结构来存储,那么二叉树的最小深度是: 解析:深度为k的二叉树,最多有2^k-1个节点,这时的二叉树成为满二叉树。 Log2(N+1) 2.形结构的一种重要运算。若已知一棵二叉树的前序序列是BEFCGDH,中序序列是FEBGCHD,则后序序列是:FEGHDCB 3.下列算法的功能是: /*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 4 B 5 C 22 D 23 解析:23 7、设有如下定义: Unsigned long pulArray[]={6,7,8,9,10}; Unsigned long *pulPtr; 则下列程序段的输出结果为——

届华为校园招聘上机考试题

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 2. #include 3. #include 4. #include 5. #define N 5 6. 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

华为笔试经验及题目

华为笔试经验及题目 华为认证,基于ICT产业链人才个人职业发展生命周期,以层次化的职业技术认证为指引,以下是CN人才网小编整理的华为笔试经验及题目,欢迎阅读参考! H12-211 HCNA-HNTD考试大纲 2.1 考试内容 IP网络基础 1. 路由交换(数通)基础知识 2. 网络基本概念、IP网络构架、标准化组织与协议 3. OSI、TCP/IP协议模型结构、各个层次的功能以及报文封装 4. IPv4子网划分 5. ARP原理 6. TCP/UDP原理 7. 数据转发过程 8. 常用应用层协议FTP、DHCP的工作原理

9. Ping,Tracert,Telnet等常用工具原理与应用 局域网技术 1. 以太网技术、交换机基本原理 2. STP、RSTP、VLAN、GARP&GVRP以及WLAN基本原理以及在VRP中的实现 3. 如何使用STP、RSTP、VLAN、GARP&GVRP以及WLAN 等技术以及华为交换机构建小型交换网络 广域网技术 1.HDLC、PPP、Frame Relay以及在华为产品中的实现 路由技术 1.静态路由协议原理、RIP协议基本原理、OSPF协议基本原理以及在VRP中的实现 2.如何使用路由技术以及华为路由器构建小型路由网络 网络安全 1. AAA工作原理

2. ACL原理以及在华为路由设备中的配置 3. IPsec VPN、GRE原理以及在华为路由设备中的配置 4. 如何利用网络安全技术保证网络安全性 产品知识 1.VRP特点、基本操作与维护 2.华为路由器、交换机产品特点以及在IP网络中的应用 网络管理 1. SNMP原理与配置 2. e-Sight的基础知识以及简单应用 IPv6技术 1. IPv6基础 2. RIPng、OSPFv3协议原理以及在华为路由设备中的配置 3. DHCPv6协议原理以及在IP网络中的应用 题目练习: 1. 找错 void test1()

华为校园招聘电子科大上机题目

华为校园招聘电子科大上机题目 一.题目描述(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打印输出当前你可以使用其他方法测试,只要 保证最终程序能正确执行即可,该函数实现可以任意修改,但是 不要改变函数原型。一定要保证编译运行不受影响。 二.题目描述(40分):通过键盘输入一串小写字母(a~z)组成的字符串。请编写一个字符串压缩程序,将字符串中连续出席 的重复字母进行压缩,并输出压缩后的字符串。

压缩规则: 1.仅压缩连续重复出现的字符。比如字符串“abcbc“由于无连续重复字符,压缩后的字符串还是“abcbc“。 2.压缩字段的格式为“字符重复的次数+字符“。例如:字符串“xxxyyyyyyz“压缩后就成为“3x6yz“。 要求实现函数: void stringZip(const char *pInputStr, long lInputLen, char *pOutputStr); 【输入】 pInputStr:输入字符串 lInputLen:输入字符串长度 【输出】 pOutputStr:输出字符串,空间已经开辟好,与输入字符串等长;【注意】 只需要完成该函数功能算法,中间不需要有任何IO的输入输出示例输入:“cccddecc” 输出:“3c2de2c” 输入:“adef” 输出:“adef” 输入:“pppppppp” 输出:“8p” 三.题目描述(50分):通过键盘输入100以内正整数的加.减运算式,请编写一个程序输出运算结果字符串。 输入字符串的格式为:“操作数1 运算符操作数2”,“操作数”与“运算符”之间以一个空格隔开。 补充说明: 1.操作数为正整数,不需要考虑计算结果溢出的情况。 2.若输入算式格式错误,输出结果为“0”。

华为笔试题a

【第一部分:基本知识篇】 1、华为公司的全称为() A、深圳市华为技术有限公司 B、华为技术有限公司 C、华为公司 D、我司 (答案:B,答A、C者酌情给分,答D者立即辞退,我司三令五申禁止使用该华为内部土语,屡禁不止,老员工不可教也,只好从新员工抓起,格杀勿论) 2、华为公司的企业性质是() A、民营 B、私营 C、国营 D、上市公司 (答案:A,本题主要让考生了解公司的性质) 3、华为公司的商标象征() A、红太阳 B、菊花 C、扇贝 (答案:B,答A者酌情给分,答C者立即辞退,天天就想着吃) 4、从下列选项中选择出公司的常务副总裁() A、任正非 B、孙亚芳 C、李一男 D、郑宝用 E、张燕燕 (答案:BD,答C者立即辞退,让他到李一男的公司去报到吧) 5、华为公司的年中奖一般是在每年的什么时候发() A、元旦后 B、春节前 C、7月下旬或8月上旬 D、劳动节前 E、国庆节前 (答案:C,切记,因为是年中奖,而不是年终奖) 6、华为公司的配给你的股票是() A、发的 B、用自己的奖金去买 (答案:B) 7、老板常说的土八路,是指() A、老板自己的革命年代的光辉历史 B、本地化的用服兄弟 C、季度考核为 D的兄弟 (答案:B) 【第二部分:部门篇】 1、你所在的一级部门为() A、技术支援部

B、国际技术支援部 C、国际技术支援部国内分部 D、用服 (答案:B,答A、C者酌情给分,答D者作不合格处理,为了提高技术支援部形象,公司早就取消用服这个字眼,而且于2001年春节后悄悄地将技术支援部前加“国际”二字) 2、你所在的二级部门为() A、传输产品技术支援管理部 B、传输工程部 C、传输用服工程中心 D、光网络产品技术支援管理部 (答案:A,首先得把自己的部门搞清楚,答D者,有远见,有潜力,可以酌情给分,很可能在2001年未就改成这个名字,因为市场中研已经改了,就差技术支援部了) 3、传输的商标为() A、SBS B、SDH C、OptiX D、Metro (答案:C,答A者酌情给分,最起码还知道老商标) 4、技术支援部与国际技术支援部的关系() A、国际技术支援部是技术支援部下面的一个部门,负责海外 B、技术支援部是国际技术支援部下面的一个部门,负责国内 C、技术支援部是国际技术支援部的前身 D、国际技术支援部是技术支援部的前身 (答案:C) 【第三部分:业务篇】 1、SBS是() A、传输产品的老商标 B、同步骨干系统 C、傻不傻的拼音缩写 D、帅不帅的拼音缩写 (答案:AB,答CD者立即辞退) 2、SDH是() A、传输产品商标 B、同步数字序列

华为校招硬件技术工程师机考试卷试题包括答案.docx

1.(判断题 )DRAM 上电时存储单元的内容是全 0,而 Flash 上电时存储单元的内容是全1。 (4分) A.正确 B.错误 FLASH可保存 2.(判断题 )眼图可以用来分析高速信号的码间 干扰、抖动、噪声和衰减。(4 分 ) A.正确 B.错误 3.(判断题 )以太网交换机将冲突域限制在每个 端口,提高了网络性能。 (4 分 ) A.正确 B.错误 4.(判断题 )放大电路的输出信号产生非线性失 真是由于电路中晶体管的非线性引起的。(4分) A.正确 B.错误 5.(判断题 )1 的 8 位二进制补码是0000_0001,-1的 8 位二进制补码是1111_1111 。 (4 分 ) A.正确 B.错误 6.(判断题 )洗衣机,电冰箱等家用电器都使用 三孔插座,是因为如果不接地,家用电器是不 能工作的。 (4 分 ) A.正确 B.错误 7.(判断题 )十进制数据 0x5a 与 0xa5 的同或运算 结果为: 0x00 。 (4 分 ) A.正确 B.错误 8.(判断题 )硅二极管的正向导通压降比锗二极 管的大 (4 分 ) A.正确 B.错误 9.(单选题 )一空气平行板电容器,两级间距为 d,充电后板间电压为u。然后将电源断开, 在平板间平行插入一厚度为d/3 的金属板。此时电容器原板间电压变为(4 分 ) A.U/3 B.2U/3 C.3U/4 D.不变 精品文档 但电容的大小不是由 Q(带电量)或U(电压)决定的,即: C=εS/4πkd。其中,ε是一个常数, S 为电容极板 的正对面积, d 为电容极板的距离, k 则是静 电力常量。而常见的平行板电容器 电容为 C=εS/d. (ε 为极板间介质的介电常数,S 为极板面积, d 为极板间的距离。) 3 电容器的电势能计算公式:E=CU^2/2=QU/2 10.(单选题 )8086CPU 内部包括哪些单元(4 分 ) A.ALU,EU B.ALU,BIU C.EU,BIU D.ALU,EU,BIU 80x86 从功能上分执行单元EU(Execution Unit),和总线接口单元BIU(Bus Interface Unit),执行单元由 8 个 16位通用寄存器, 1 个 16位标志寄存器, 1 个 16 位暂存寄存器,1个 16 位算术逻辑单元 ALU及 EU控制电路组 成。 总线接口单元由4个16位段寄存器(CS,DS,SS,ES),1 个 16 位的指令指针寄存器, 1个与 EU通信的内部暂存器, 1 个指令队列, 1 个计算20 位物理地址的加法器∑及总线控制电路构成。 11.(单选题 )为了避免 50Hz 的电网电压干扰放大器,应该用那种滤波器: (4 分 ) A.带阻滤波器 B.带通滤波器 C.低通滤波器 D.高通滤波器 12.(单选题 )关于 SRAM 和 DRAM,下面说话正 确的是: (4 分 ) A.SRAM 需要定时刷新,否则数据会丢失 B.DRAM 使用内部电容来保存信息 C.SRAM 的集成度高于DRAM D.只要不掉点,DRAM 内的数据不会丢失 【解析】 SRAM和 DRAM都是随机存储器,机器掉电后,两者的信息都将丢失。它们的最大区别就是:DRAM是用电容有无电荷来表示信息0 和 1,为防止电容漏电而导致读取信息出错,需要周期性地给电 容充电,即刷新;而SRAM是利用触发器的两个稳态来表示信息 0 和 1,所以不需要刷新。另外,SRAM的存取速度比 DRAM更高,常用作高速缓冲存储器Cache。

华为2015校园招聘上机考试题

华为2015校园招聘上机考试题 第一题(60分): 按要求分解字符串,输入两个数M,N;M代表输入的M串字符串,N代表输出的每串字符串的位数,不够补0。例如:输入2,8,“abc”,“123456789”,则输出为“abc00000”,“12345678“,”90000000” 1.转载请标明出处,原文地址: https://www.wendangku.net/doc/bd2203452.html,/hackbuteer1/article/details/39253767 2.#include 3.#include https://www.wendangku.net/doc/bd2203452.html,ing namespace std; 5. 6.void solve(char *str , int n , int len) 7.{ 8.int i , j , k , quotient , remainder; 9.quotient = len / n; //原字符串被分解的个数 10. remainder = len - n * quotient; //剩余的字 符串的个数 11. 12. for(i = 0 ; i < len ; i += n) 13. { 14. if(len - i < n) 15. { 16. k = n - len + i; 17. for(j = i ; j < len ; ++j) 18. printf("%c" , str[j]); 19. for(j = 0 ; j < k ; ++j) 20. putchar('0'); 21. } 22. else 23. { 24. for(j = i ; j < i + n ; ++j) 25. printf("%c" , str[j]); 26. } 27. putchar(' '); 28. } 29. printf("\n"); 30.} 31. 32.int main(void)

华为硬件笔试题目

一选择 1.微分电路 222 2.CISC,RISC 答:CISC(复杂指令集计算机)和RISC(精简指令集计算机)是前CPU 的两种架构。早期的CPU全部是CISC架构,它的设计目的是要用最少的机器语言指令来完成所需的计算任务。CISC(Complex Instruction Set Computer)结构有其固有的缺点,CISC 指令集的各种指令中,其使用频率却相差悬殊,大约有20%的指令会被反复使用,占整个程序代码的80%。而余下的80%的指令却不经常使用,在程序设计中只占20%,显然,这种结构是不太合理的。RISC 并非只是简单地去减少指令,而是把着眼点放在了如何使计算机的结构更加简单合理地提高运算速度上。RISC 结构优先选取使用频最高的简单指令,避免复杂指令;将指令长度固定,指令格式和寻地方式种类减少;以控制逻辑为主,不用或少用微码控制等措施来达到上述目的。 到目前为止,RISC体系结构也还没有严格的定义,一般认为,RISC 体系结构应具有如下特点: 采用固定长度的指令格式,指令归整、简单、基本寻址方式有2~3种。 使用单周期指令,便于流水线操作执行。 大量使用寄存器,数据处理指令只对寄存器进行操作,只有加载/ 存储指令可以访问存储器,以提高指令的执行效率。当然,和CISC 架构相比较,尽管RISC 架构有上述的优点,但决不能认为RISC 架构就可以取代CISC 架构,事实上,RISC 和CISC 各有优势,而且界限并不那么明显。现代的CPU 往往采CISC 的外围,内部加入了RISC 的特性,如超长指令集CPU 就是融合了RISC 和CISC 的优势,成为未来的CPU 发展方向之一 3.数据链路层 答:数据链路可以粗略地理解为数据通道。物理层要为终端设备间的数据通信提供传输媒体及其连接,.媒体是长期的,连接是有生存期的。在连接生存期内,收发两端可以进行不等的一次或多次数据通信.每次通信都要经过建立通信联络和拆除通信联络两过程.这种建起 来的数据收发关系就叫作数据链路. 二填空 1.IIR滤波器 答:IIR滤波器有以下几个特点: ①IIR数字滤波器的系统函数可以写成封闭函数的形式。 ②IIR数字滤波器采用递归型结构,即结构上带有反馈环路。 ③IIR数字滤波器在设计上借助了成熟的模拟滤波器的成果 ④IIR数字滤波器的相位特性不好控制,对相位要求较高时,需加相位校准网络。 2.简述分组交换的特点和不足 答:分组交换也称为包交换。分组交换机将用户要传送的数据按一定长度分割成若干个数据段,这些数据段叫做“分组”(或称包)。传输过程中,需在每个分组前加上控制信息和地址标识(即分组头),然后在网络中以“存储——转发”的方式进行传送。到了目的地,交换机将分组头去掉,将分割的数据段按顺序装好,还原成发端的文件交给收端用户,这一过程称为分组交换。 分组交换的特点有: ①分组交换方式具有很强的差错控制功能,信息传输质量高。 ②网络可靠性强。

相关文档
相关文档 最新文档