一个小小研究生的华为面试之旅

    自己是自动化学院的一名学生,当初为了不找工作,才决定的考研,如今又要找工作了,自动化是一门万金油,但是现在的热门专业却是软件,没有哪家公司可以离开计算机,离开软件。我从研一开始认真学习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;

}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值