騰訊校園招聘C語言筆試題

    時間:2022-10-12 09:18:14 筆試題目 我要投稿
    • 相關(guān)推薦

    騰訊2014校園招聘C語言筆試題

      1. 輸入一個鏈表的頭結(jié)點,從尾到頭反過來輸出每個結(jié)點的值。鏈表結(jié)點定義如下:

    騰訊2014校園招聘C語言筆試題

      struct ListNode

      {

      int m_nKey;

      ListNode* m_pNext;

      };

      A: 遞歸方法逆序輸出,棧方法逆序輸出。 (任意實現(xiàn)一種既可)

      void PrintListUsingRecursicve(pListNode head)

      {

      if(head!=NULL)

      {

      PrintListUsingRecursicve(head->m_pNext);

      printf("%d/n",head->m_nKey);

      }

      }

      void PrintListUsingStack(pListNode head)

      {

      Stack s;

      s.top=0;

      pListNode p=head;

      do{

      push(&s,p->m_nKey);

      p=p->m_pNext;

      }while(p!=NULL);

      while(!IsEmpty(&s))

      {

      printf("%d/n",pop(&s));

      }

      }

      2. 二元樹的深度

      題目:輸入一棵二元樹的根結(jié)點,求該樹的深度。從根結(jié)點到葉結(jié)點依次經(jīng)過的結(jié)點(含根、葉結(jié)點)形成樹的一條路徑,最長路徑的長度為樹的深度。

      #include<stdio.h>

      #include<stdlib.h>

      #include<string.h>

      #include<time.h>

      #define MAXLEN 100

      #define MAXNUM 10

      typedef int Tree[MAXLEN];

      Tree bt;

      int GetDeep(int i)

      {

      int l=0,r=0;

      if(bt[i*2]!=-1)

      {

      l=GetDeep(i*2)+1;

      }

      if(bt[i*2+1]!=-1)

      {

      r= GetDeep(i*2+1)+1;

      }

      return l>r?l:r;

      }

      int main()

      {

      int i=0;

      memset(bt,-1,sizeof(bt));

      for(i=1;i<=MAXNUM;i++)

      bt[i]=i;

      bt[(i-1)*2]=i*2;

      printf("%d /n",GetDeep(1));

      return 0;

      }

      3. 整數(shù)的二進制表示中1的個數(shù)

      題目:輸入一個整數(shù),求該整數(shù)的二進制表達中有多少個1。例如輸入10,由于其二進制表示為1010,有兩個1,因此輸出2。

      (關(guān)鍵是能不能想到后面的那個方法,只要想到這個方法既可)

      int Bit1inInt(int i)

      {

      int result=0;

      do{

      result+=i&1;

      }while(i=i>>1);

      return result;

      }

      4. 從上往下遍歷二元樹

      題目:輸入一顆二元樹,從上往下按層打印樹的每個結(jié)點,同一層中按照從左往右的順序打印。

      (先序,中序,后序三種方式實現(xiàn))

      如果從上往下,從左到右的話只有一種遍歷的方式:廣度優(yōu)先遍歷。

      #include<stdio.h>

      #include<stdlib.h>

      #include<string.h>

      #include<time.h>

      #define MAXLEN 100

      #define MAXNUM 10

      typedef int Tree[MAXLEN];

      Tree bt;

      typedef struct queue

      {

      int begin,end;

      int space[MAXLEN];

      }Queue;

      int main()

      {

      int i=0;

      memset(bt,-1,sizeof(bt));

      for(i=1;i<=MAXNUM;i++)

      bt[i]=i;

      Queue qe;

      qe.begin=0;qe.end =0;

      qe.space[qe.end++]=bt[1];

      while(qe.begin!=qe.end)

      {

      if(bt[2*qe.space[qe.begin]]!=-1)//lchild

      {

      qe.space[qe.end++]=bt[2*qe.space[qe.begin]];

      }

      if(bt[2*qe.space[qe.begin]+1]!=-1)//rchild

      {

      qe.space[qe.end++]=bt[2*qe.space[qe.begin]+1];

      }

      qe.begin++;

      }

      printf("--------------------/n");

      for(i=0;i<qe.end;i++)

      printf("%d ",qe.space[i]);

      return 0;

      }

      先序,中序,后序三種方式的只是遍歷二元樹

      typedef int Tree[MAXLEN];

      Tree bt;

      void PreOrderTraverse(int i)

      {

      if(bt[i]==-1) {return }

      printf("%d ",bt[i]);

      PreOrderTraverse(i*2);//lchild

      PreOrderTraverse(i*2+1);//rchild

      }

      void InOrderTraverse(int i)

      {

      if(bt[i]==-1) {return }

      InOrderTraverse(i*2);//lchild

      printf("%d ",bt[i]);

      InOrderTraverse(i*2+1);//rchild

      }

      void PostOrderTraverse(int i)

      {

      if(bt[i]==-1) {return }

      PostOrderTraverse(i*2);//lchild

      PostOrderTraverse(i*2+1);//rchild

      printf("%d ",bt[i]);

      }

      int main()

      {

      int i=0;

      memset(bt,-1,sizeof(bt));

      for(i=1;i<=MAXNUM;i++)

      bt[i]=i;

      printf("/n---------------/n");

      PreOrderTraverse(1);

      printf("/n---------------/n");

      InOrderTraverse(1);

      printf("/n---------------/n");

      PostOrderTraverse(1);

      return 0;

      }

      5. 查找鏈表中倒數(shù)第k個結(jié)點

      題目:輸入一個單向鏈表,輸出該鏈表中倒數(shù)第k個結(jié)點。鏈表的倒數(shù)第0個結(jié)點為鏈表的尾指針。鏈表結(jié)點定義如下:

      struct ListNode {

      int m_nKey;

      ListNode* m_pNext;

      };

      (最快的方法,只遍歷一遍)

      int FindCoundDownInList(pListNode head,int num)

      {

      pListNode p1,p2;

      p1=p2=head;

      while(num-->0 && p1!=NULL) p1=p1->m_pNext;

      if(p1==NULL) return 0;

      else{

      while(p1!=NULL)

      {

      p1=p1->m_pNext;

      p2=p2->m_pNext;

      }

      return p2->m_nKey;

      }

      }

      6. 求三角形面積

      給出三角形的三個邊長為a、b、c,求三角形的面積。

      (注意考慮是不是三角形)

      double GetArea(int a,int b,int c)

      {

      if(a-b>=c || a+b<=c)

      return -0.1;

      else{

      double s=0.5*(a+b+c);

      double area=sqrt(s*(s-a)*(s-b)*(s-c));

      return area;

      }

      }

      7. 壓縮字符串

      例如字串”aaabbbbccccc”,轉(zhuǎn)換成相鄰字符+個數(shù)的形式壓縮,成為”a3b4c5”。

      (如果有10個數(shù)相同) 假設(shè)需要考慮解壓縮

      char *MergeString(const char * ch)

      {

      char *s=(char *)malloc(sizeof(ch));

      if(s!=NULL)

      {

      int len=strlen(ch), i=0,j=0,k=0;

      for(;i<len;i=j)

      {

      int num=0;

      while(ch[j]==ch[i]) j++,num++;

      s[k++]=ch[i];

      sprintf(s+k,"%d",num);

      k=strlen(s);

      }

      }

      return s;

      }

      8. 如何判斷一個單向鏈表是否有環(huán)。

      int ISCircle(pListNode head)

      {

      pListNode p1=head;

      p1=p1->m_pNext;

      while(p1!=NULL)

      {

      if(p1==head) return 1;

      else p1=p1->m_pNext;

      }

      return 0;

      }

      9. 判斷一個字符串是否對稱。

      aabbaa , efffe返回true

      aabac返回false

      int SymmetricString( const char *ch)

      {

      int len=strlen(ch);

      int i=0,j=len-1;

      if(len%2!=0) return 0;

      for(i=0,j=len-1;i<=len/2;i++,j--)

      {

      if(ch[i]!=ch[j]) return 0;

      }

      return 1;

      }

      10. 判斷一個字符串是否是另一個字符串的字串

      int next[20];

      void get_next(const char* T,int next[])

      {

      int i=0,j=-1;next[0]=-1;

      int len=strlen(T);

      while(i<len)

      {

      if(j==-1||T[i]==T[j]) {++i;++j;next[i]=j;}

      else j=next[j];

      }

      }

      int index_KMP(const char * S,const char * T)

      {

      int i=0,j=0;

      get_next(T,next);

      int lens=strlen(S),lent=strlen(T);

      while(i<lens &&j<lent){

      if(j==-1 ||S[i]==T[j]){++i;++j;}

      else j=next[j]; }

      if(j>=lent) return i-lent;

      else return -1;

      }

      鏈表的定義,棧的定義:

      typedef struct stack

      {

      int top;

      int space[MAXLEN+1];

      }Stack;

      int push(Stack *s,int num)

      {

      if(s->top>=sizeof(s->space)/sizeof(int)) return -1;//Error s->space[s->top++]=num;

      return num;

      }

      int pop(Stack *s)

      {

      if(s->top<0) return -1;

      return s->space[--s->top];

      }

      int IsEmpty(Stack *s)

      {

      return s->top==0;

      }

      typedef struct ListNode {

      int m_nKey;

      struct ListNode *m_pNext;

      }ListNode,*pListNode;

      pListNode CreateList()

      {

      srand((unsigned long)time(NULL));

      pListNode head,p1,p2;

      head=(pListNode)malloc(sizeof(ListNode));

      p1=head;p2=p1;

      int i=MAXLEN;

      while(i--){

      p2=(pListNode)malloc(sizeof(ListNode));

      p2->m_nKey= rand()*rand()%(MAXLEN*rand());

      p1->m_pNext=p2;

      p1=p2;

      }

      p2->m_pNext=NULL;

      return head;

      }

      void PrintList(pListNode head)

      {

      pListNode p=head;

      do{

      printf("%d/n",p->m_nKey);

      p=p->m_pNext;

      }while(p!=NULL);

      }

    【騰訊校園招聘C語言筆試題】相關(guān)文章:

    騰訊技術(shù)類校園招聘筆試試題(A8卷)11-21

    華為C語言筆試題12-12

    華為筆試題(C語言)12-10

    基礎(chǔ)C++/C語言筆試題分享11-21

    yahoo在線筆試題(c語言)12-12

    C語言筆試試題及答案07-31

    c語言筆試題目及答案08-17

    騰訊筆經(jīng)11-28

    2015C語言筆試題及答案08-08

    計算機C語言試題及答案02-25

    91久久大香伊蕉在人线_国产综合色产在线观看_欧美亚洲人成网站在线观看_亚洲第一无码精品立川理惠

      日韩无砖专区一中文字视频 | 一级激情AV在线播放 | 亚洲日韩国产天堂网 | 亚洲理论在线视频 | 亚洲午夜在线网址网址 | 亚洲男人在线天堂2019香蕉 |