mournjustmournjust.blog.chinaunix.net
mournjust
宅男
全部博文(79)
2017年(11)
2016年(12)
2015年(6)
2012年(10)
2011年(33)
2010年(7)
ccssbb1
yohoo_fs
chenwenm
fpseusta
long_yii
duomeng1
bough22
Nicoleji
铸道的汉
wuzexian
chen4546
rookie_1
star永恒
狂奔的石
sunmacey
ljb20170
gaocheng
shisir
分类: C/C++
2011-10-06 18:10:22
百度技术研发笔试题目
/*百度面试题
* 有一根27厘米的细木杆,在第3厘米、7厘米、11厘米、17厘米、23厘米这五个位置上各有一只蚂蚁。
* 木杆很细,不能同时通过一只蚂蚁。开始 时,蚂蚁的头朝左还是朝右是任意的,它们只会朝前走或调头,
* 但不会后退。当任意两只蚂蚁碰头时,两只蚂蚁会同时调头朝反方向走。假设蚂蚁们每秒钟可以走一厘米的距离。
#include <stdio.h> #include <iostream> using namespace std; struct ant { int isout; int postion; int direct; }; struct ant ant[5]; #define STICK_LENGTH 27 void init_ant_postion(void) { ant[0].postion = 3; ant[1].postion = 7; ant[2].postion = 11; ant[3].postion = 17; ant[4].postion = 23; int i = 0; for(i = 0;i < 5;i++) ant[i].isout = 0; } #define DIRECTION_MASK 0x1 void init_ant_driect(int a) { int i = 0; for(i = 0;i < 5;i++) { ant[i].direct = a&DIRECTION_MASK ? 1:-1; a >>= 1; } } void antisout(void) { int i; for( i =0 ;i < 5;i++) if(ant[i].postion < 0 || ant[i].postion > 27) ant[i].isout =1; } int allout(void) { int i ; for(i = 0; i < 5;i++) if(ant[i].isout == 0) return 0; return 1; } void swap(int *x, int* y) { int tmp = *x; *x = *y; *y = tmp; } void ismeet(void) { int i ; for( i = 0; i <=3;i++) { if(ant[i].isout == 0 && ant[i+1].isout == 0) if(ant[i].postion == ant[i+1].postion) { swap(&(ant[i].direct),&(ant[i+1].direct)); } } } void walk(void) { int i = 0; for(i = 0; i < 5;i++) ant[i].postion += ant[i].direct; } int ant_walk(void) { int time = 0;//时间 while(++time) { walk();//每一只蚂蚁走一步 ismeet();//是否有两只蚂蚁相遇,如果相遇,那么掉头 antisout();//是否有蚂蚁走出木棍,如果是,那么就修改isout标志位 if(allout())//所有的蚂蚁是否离开木杆 break; } return time; } int main(void) { int min = 27,max = 0; for(int i = 0; i < 32;i++)//32 = 2^5 { int time; init_ant_postion(); init_ant_driect(i); time = ant_walk(); // printf("%d\n",time); if(time < min) min =time; if(time > max) max = time; } printf("max = %d ,min = %d \n",max,min); return 0; }
上一篇:遍历二叉树
下一篇:定义栈的结构,添加函数min得到栈的最小元素 函数min push 以及pop的时间复杂度为 O(1)
登录 注册