本文主要是介绍百度北京站2014研发笔试,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!
1、OSI七层模型
2物理层
3数据链路层
4网络层
5传输层
6会话层
7表示层
8应用层
2、进程间数据共享的方式三种
文件映射
共享内存
信号
匿名管道
命名管道
邮件槽
剪贴板
3、TCP/UDP区别
4、打印数组的所有组合
#include <stdio.h> int n = 0; void swap(int *a, int *b)
{ int m; m = *a; *a = *b; *b = m;
}
void perm(int list[], int k, int m)
{ int i; if(k > m) { for(i = 0; i <= m; i++) printf("%d ", list[i]); printf(" "); n++; } else { for(i = k; i <= m; i++) { swap(&list[k], &list[i]); perm(list, k + 1, m); swap(&list[k], &list[i]); } }
}
int main()
{ int list[] = {1, 2, 3, 4, 5}; perm(list, 0, 4); printf("total:%d ", n); return 0;
}
二进制
首先,把数组每一个元素用一个二进位表示,例如:
A B C D E
1 1 1 1 1 ---> 于是它最多有11111(二进制)种不重复组合(即31种)(不考虑顺序--按楼主要求)
于是,只要检查从1到31这些数字的二进位哪些是二进制值1,就可以得出组合了。(位值为1的元素选取,位值为0的元素弃之)
(转自网络)
5、二叉树的面积
深度优先搜索,广度优先搜索的实现
#include<stdio.h>
#include<malloc.h>
#include<stdlib.h>
#define TRUE 1
#define FLASE 0
#define OK 1
#define ERROR 0
#define INFEASIBLE -1
#define OVERFLOW -2
typedef int Status;typedef int TElemType;
typedef struct BiTNode
{TElemType data;struct BiTNode *lchild,*rchild;
} BiTNode,*BiTree;Status CreateBiTree(BiTree &T)
{TElemType e;scanf("%d",&e);if(e==0) T=NULL;else {T=(BiTree)malloc(sizeof(BiTNode));if(!T)exit(OVERFLOW);T->data =e;CreateBiTree(T->lchild );CreateBiTree(T->rchild );}return OK;
}int max(int a[])
{int max,i;max=a[0];for(i=1;i<20;i++){if(max<a[i])max=a[i];}return max;
}int BiTreeWidth (BiTree T)
{if(T==NULL)return 0;else{static int a[20]={0};static int i=0;a[i]++;i++;BiTreeWidth (T->lchild );if(T->lchild ==NULL)i--;BiTreeWidth (T->rchild );if(T->rchild ==NULL)i--;return max(a);}
}
另附:
二叉树高度、宽度、结点个数、叶子结点个数
实现二叉树宽度递归算法~
#include <iostream>
using namespace std;
typedef struct node
{
char data;
int lab;
struct node *lchild;
struct node *rchild;
}btree;
int m=0;
void ct(btree *&b,char *str)
{
btree *st[99],*p=NULL;
int top=-1,k,j=0;
char ch;
b=NULL;
ch=str[j];
while(ch!='\0')
{switch(ch){case '(':top++;st[top]=p;k=1;break;case ')':top--;break;case ',':k=2;break;default:p=(btree *)malloc(sizeof(btree));p->data=ch;p->lchild=p->rchild=NULL;if(b==NULL)b=p;else{switch(k){case 1:st[top]->lchild=p;break;case 2:st[top]->rchild=p;break;}}}j++;ch=str[j];
}
}
void outbt(btree *b)
{
if(b!=NULL)
{cout<<b->data;outbt(b->lchild);outbt(b->rchild);
}
}
btree *findchild(btree *b,char x)
{
btree *p;
if(b==NULL)
{return NULL;
}
elseif(b->data==x){cout<<"找到结点"<<x<<"!"<<endl;if(b->lchild==NULL)cout<<"左节点为空!"<<endl;elsecout<<"左孩子为:"<<b->lchild->data<<endl;if(b->rchild==NULL)cout<<"右孩子为空!"<<endl;elsecout<<"右孩子为:"<<b->rchild->data<<endl;return b;}else{p=findchild(b->lchild,x);if(p!=NULL)return p;elsereturn findchild(b->rchild,x);}
}
int btreeheight(btree *b)
{
int lchildh,rchildh;
if(b==NULL)return(0);
else
{lchildh=btreeheight(b->lchild);rchildh=btreeheight(b->rchild);return(lchildh>rchildh?(lchildh+1):(rchildh+1));
}
}
int i=-1,a[20];
void btreewide(btree *b)
{
if(b!=NULL)
{if(b->lchild!=NULL){i++;b->lchild->lab=b->lab+1;a[i]=b->lab+1;}if(b->rchild!=NULL){i++;b->rchild->lab=b->lab+1;a[i]=b->lab+1;}btreewide(b->lchild);btreewide(b->rchild);
}
}
void vernum(btree *b)
{
if(b!=NULL)
{m++;vernum(b->lchild);vernum(b->rchild);
}
}
int leafver(btree *b)
{ if(b==NULL)return 0;else if(b->lchild==NULL&&b->rchild==NULL)return 1;else return leafver(b->lchild)+leafver(b->rchild);
}
void main()
{
char *s;
s="A(B(D,E(H(J,K(L,M(,N))))),C(F,G(,I)))";
btree *bt;
cout<<"将要创建的二叉树:"<<endl<<s<<endl;
ct(bt,s);
cout<<"输出二叉树:"<<endl;
outbt(bt);
cout<<endl;
cout<<"H结点左右孩子结点值:"<<endl;
findchild(bt,'H');
cout<<"二叉树的深度:"<<btreeheight(bt)<<endl;
vernum(bt);
cout<<"二叉树结点个数:"<<m<<endl;
cout<<"二叉树叶子结点个数:"<<leafver(bt)<<endl;
bt->lab=1;
btreewide(bt);
int j,k,num,max=0;
for(j=1;j<=i+1;j++)
{num=0;for(k=0;k<=i;k++)if(a[k]==j)num++;if(max<num){max=num;}
}
cout<<"二叉树宽度为:"<<max<<endl;
}
6、地图的点的文字位置的确定
1、扫描点附近的矩形邻域内是否为空
2改进:搜索算法
这篇关于百度北京站2014研发笔试的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!