自己是自动化学院的一名学生,当初为了不找工作,才决定的考研,如今又要找工作了,自动化是一门万金油,但是现在的热门专业却是软件,没有哪家公司可以离开计算机,离开软件。我从研一开始认真学习C,但是效果不是很理想。
所以我想给年轻的你一些忠告,多看书,多巧代码,要自己动手。
言归正传,华为笔试,这些网上很多可以自己找一下,当时我自己一个人做的,其实笔试你可以跟几个同学一起做,然后就是机试,第一道题,还比较简单,字符串的问题。
第二道题,环形链表的问题。第三道题,数独的问题。第三道题我不基本不会,都没怎看,把主要精力放在第二道题上,在规定时间里也没做对。华为的机试规矩是,第一题100分,第二题200分,第三题300分,100分就算通过,当然我也通过了。
专业面试,先问了一下我简历上的项目,然后喊我手写链表反向,我以前没注意看,就没写出来,第二道题是字符串比较的问题,比如abcde,那么abcde,bcdea,cdeab等都与abcde相等,我也没完全写对。第三道题,二分查找,我也没完全写对。
后面回学校自己写了下,虽然完成了,但是还是被淘汰了,希望大家能够早作准备。
二分查找:
#include "iostream"
using namespace std;
int find(int* a,int begin,int end,int x)
{
int s=(begin+end)/2;
if(a[s]==x)
return s;
if(a[s]>x)
{
end=s-1;
return find(a,begin,end,x);
}
if(a[s]<x)
{
begin=s+1;
return find(a,begin,end,x);
}
return -1;
}
void main()
{
int a[]={1,3,4,5,6,7,8,9};
cout<<find(a,0,7,9)<<endl;
}
注:没有加入边界啊,空啊等判断。严格说应该加上。
链表反向:
#include<stdio.h>
#include<stdlib.h>
#include"iostream"
using namespace std;
//链表定义
typedef struct node{
int data;
struct node *next;
}link;
//构造链表
link * create_link(link *head)
{
int data[5];
int i=0;
while(i<5)
{
scanf("%d",&data[i]);
i++;
}
link *p=head;//p为每次链表更新后的最后一个节点
for (i=0;i<5;i++)
{
link *q=(link*)malloc(sizeof(link));
q->data=data[i];
q->next=NULL;
p->next=q;
p=q;
}
return head;
}
//链表反向
#include"iostream"
using namespace std;
link* reserve_link(link *head)
{
link *last=head->next;//last为链表最后一个节点,反向后为第一个节点
int num=1;
while (last->next!=NULL)
{
num++;
last=last->next;
}
link *p,*q;//p为链表更新后反向那端开始的最后一个节点
p=last;
int i;
for (i=num-1;i>=1;i--)
{
int j=1;
q=head->next;
while (j<i)//找出原向的第i各节点p
{
q=q->next;
j++;
}
p->next=q;
q->next=NULL;//此时节点q的next域是空,不加此句最后的两个节点会成环
p=q;
}
head->next=last;
return head;
}
intmain()
{
link *head=(link*)malloc(sizeof(link));
head->data=0;
head->next=NULL;
link *li=create_link(head);
cout<<li->next->data<<endl;
link *relink=reserve_link(head);
cout<<relink->next->data<<endl;
return 0;
}