腾讯校园招聘C语言笔试题

时间:2020-12-13 09:35:09 笔试题目 我要投稿

腾讯2014校园招聘C语言笔试题

  1. 输入一个链表的头结点,从尾到头反过来输出每个结点的值。链表结点定义如下:

腾讯2014校园招聘C语言笔试题

  struct ListNode

  {

  int m_nKey;

  ListNode* m_pNext;

  };

  A: 递归方法逆序输出,栈方法逆序输出。 (任意实现一种既可)

  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. 二元树的深度

  题目:输入一棵二元树的根结点,求该树的深度。从根结点到叶结点依次经过的结点(含根、叶结点)形成树的一条路径,最长路径的'长度为树的深度。

  #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. 整数的二进制表示中1的个数

  题目:输入一个整数,求该整数的二进制表达中有多少个1。例如输入10,由于其二进制表示为1010,有两个1,因此输出2。

  (关键是能不能想到后面的那个方法,只要想到这个方法既可)

  int Bit1inInt(int i)

  {

  int result=0;

  do{

  result+=i&1;

  }while(i=i>>1);

  return result;

  }

  4. 从上往下遍历二元树

  题目:输入一颗二元树,从上往下按层打印树的每个结点,同一层中按照从左往右的顺序打印。

  (先序,中序,后序三种方式实现)

  如果从上往下,从左到右的话只有一种遍历的方式:广度优先遍历。

  #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. 查找链表中倒数第k个结点

  题目:输入一个单向链表,输出该链表中倒数第k个结点。链表的倒数第0个结点为链表的尾指针。链表结点定义如下:

  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”,转换成相邻字符+个数的形式压缩,成为”a3b4c5”。

  (如果有10个数相同) 假设需要考虑解压缩

  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. 如何判断一个单向链表是否有环。

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

  }

【腾讯2014校园招聘C语言笔试题】相关文章:

腾讯校园招聘实习笔试题目10-23

华为C语言招聘笔试题目10-23

腾讯技术类校园招聘笔试试题11-22

腾讯校园招聘软件测试部分笔试题10-23

C语言笔试题回忆11-23

C语言笔试题总结11-23

C语言基础笔试题11-24

C语言笔试题集锦11-24

外企C语言笔试题11-23

腾讯校园招聘会笔试题目真题(多图)11-28