腾讯笔试题_电梯问题_思路和初步的算法_討論一下

简介: 题如下: 一座楼里没有楼梯,只有一架电梯,电梯一次最多只能乘3人,已知楼共有20层,每层有一个人,每个人都有1~20中唯一的编号,他们要去对应的楼层。 电梯初始状态:在一楼。 目标状态:每个人在相应楼层。
题如下: 一座楼里没有楼梯,只有一架电梯,电梯一次最多只能乘3人,已知楼共有20层,每层有一个人,每个人都有1~20中唯一的编号,他们要去对应的楼层。 电梯初始状态:在一楼。 目标状态:每个人在相应楼层。 试编写一个算法,完成目标状态,而且使电梯移动最小距离。 我的思路: 尽可能让电梯满载运行,而且优先解决远处的需求.使得电梯的运行轨迹类似于一个作往复运动的弹簧由于阻尼最后停下来. 对于正态分布的情况, 电梯最后的状态应接近于中点. 理想情况是对于平均分布的输入集合,电梯的运行层数为每个人的(需行层数+3+3)/3,之所以要加两个3是因为电梯在最初运行和达到目标的时候分别有一段必须空载的距离(在初始状态,电梯至少要运行三层才能装满). 当然对于大量数据来说, 实际运行的効率应该趋近这个最优结果的渐近线. 以下是我的程序:目前只是初步实现了一下.拋磚引玉. C/C++ code#include #include /* * The Question: * *一座楼里没有楼梯,只有一架电梯,电梯一次最多只能乘3人,已知楼共有20层,每层有一个人, 每个人都有1~20中唯一的编号,他们要去对应的楼层。电梯初始状态:在一楼。目标状态:每个人在相应楼层。 试编写一个算法,完成目标状态,而且使电梯移动最小距离。 * * ZhanZongru(Z80_AT_whut.edu.cn) * 2009,May,30th * * For the sake of simpliticy. * * The Building uses a United Kingdom Floor naming fashion. * 0-19 Floors. * The people in every floor use a United States naming fashion to express their destinations. * 1-20 Floors. * * In one words, 20 Americans in a UK building... */ /*Every floor can content 1 to 20 person.*/ unsigned char FloorContent[20][20]; /*The carrier struct.*/ typedef struct _Carrier{ unsigned char Position_uk; unsigned char Passager_us[3]; }Carrier; #define CAR_CAP 3 Carrier theCar; typedef enum _CurrentDirect{ UP_WARD = 0, DOWN_WARD }CurDir; CurDir theDir = UP_WARD; unsigned char cur_bottom = 0; unsigned char cur_top = 19; unsigned char IsSuccessed = 0; unsigned long RunFloorCount = 0; void Run_One_Floor(void); void LayToFloor(unsigned char pos_uk, unsigned char set_id); void LoadToCar_Up(unsigned char floor_uk, unsigned char id); void LoadToCar_Down(unsigned char floor_uk, unsigned char id); unsigned char JudgeStatus(); unsigned char FloorSize(unsigned char floor_uk); void ReCalc_Bot_Top(void); void Show_Status(void); unsigned char FloorFirstOne(unsigned char floor_uk); unsigned char Min_Passger_id(void); unsigned char Max_Passger_id(void); int main(int argc, char** argv) { char input_file[50]; char output_file[50]; FILE* fp=NULL; int i=0; int simple_crc=0; if(argc==1) { strcpy(input_file, "input.txt"); strcpy(output_file, "output.txt"); } else if(argc==2) { strcpy(input_file, argv[1]); strcpy(output_file, "output.txt"); } else if(argc>=3) { strcpy(input_file, argv[1]); strcpy(output_file, argv[2]); } else { } fp = fopen(input_file, "r"); if(fp==NULL) { perror("Failed:fopen the input file/r/n"); return -1; } /*Read in the initial status, the status could generated by another program, now by hand editing.*/ for(i=0;i(theCar.Position_uk+1)) && (theDir == UP_WARD) ) { LoadToCar_Up(theCar.Position_uk,i); } if((FloorContent[theCar.Position_uk][i]!=0) && (FloorContent[theCar.Position_uk][i]=0;i--) { if((FloorSize(i)!=1) || (FloorFirstOne(i)!=i+1)) { cur_top = i; break; } } } else if(theDir==DOWN_WARD) { for(i=0;itheCar.Passager_us[Min_Passger_id()]) { temp = FloorContent[floor_uk][id]; FloorContent[floor_uk][id] = theCar.Passager_us[Min_Passger_id()]; theCar.Passager_us[Min_Passger_id()] = temp; } } return; } /* return the minium passager's destination in the carrier.*/ unsigned char Min_Passger_id(void) { unsigned char min_id = 0; if(theCar.Passager_us[1]theCar.Passager_us[max_id]) max_id = 1; if(theCar.Passager_us[2]>theCar.Passager_us[max_id]) max_id = 2; return max_id; } /* When the direction is DOWNWARD, load a person from the floor to the carrier.*/ void LoadToCar_Down(unsigned char floor_uk, unsigned char id) { int i=0; unsigned char temp=0; //Find a empty sit set to load the passager if(theCar.Passager_us[0]==0) { theCar.Passager_us[0] = FloorContent[floor_uk][id]; FloorContent[floor_uk][id] = 0; } else if(theCar.Passager_us[1]==0) { theCar.Passager_us[1] = FloorContent[floor_uk][id]; FloorContent[floor_uk][id] = 0; } else if(theCar.Passager_us[2]==0) { theCar.Passager_us[2] = FloorContent[floor_uk][id]; FloorContent[floor_uk][id] = 0; } else {//Full, swap if wothy if(FloorContent[floor_uk][id]
目录
相关文章
|
30天前
|
算法 前端开发 Java
数据结构与算法学习四:单链表面试题,新浪、腾讯【有难度】、百度面试题
这篇文章总结了单链表的常见面试题,并提供了详细的问题分析、思路分析以及Java代码实现,包括求单链表中有效节点的个数、查找单链表中的倒数第k个节点、单链表的反转以及从尾到头打印单链表等题目。
30 1
数据结构与算法学习四:单链表面试题,新浪、腾讯【有难度】、百度面试题
|
4月前
|
机器学习/深度学习 数据采集 人工智能
算法金 | 致敬深度学习三巨头:不愧是腾讯,LeNet问的巨细。。。
**LeNet 摘要** - LeNet 是 Yann LeCun 在 1989 年提出的卷积神经网络,用于手写数字识别,是深度学习和计算机视觉的里程碑。 - 网络结构包括卷积层(C1, C3, C5)、池化层(S2, S4)和全连接层(F6),处理 32x32 灰度图像,最终分类为 10 类。 - 卷积层提取特征,池化层降低维度,全连接层负责分类。激活函数主要使用 Sigmoid。 - LeNet 在 MNIST 数据集上表现优秀,但现代网络常使用 ReLU 激活和更深结构。 - LeNet 的局限性包括网络较浅、Sigmoid 梯度消失问题和平均池化,但其创新为后续 CNN 发展铺平道路
51 1
算法金 | 致敬深度学习三巨头:不愧是腾讯,LeNet问的巨细。。。
|
5月前
|
机器学习/深度学习 人工智能 自然语言处理
算法金 | 不愧是腾讯,问基础巨细节 。。。
**摘要:** 本文介绍了Adaboost算法的基本概念、工作原理和数学基础,它是由 Freund 和 Schapire 在 1996 年提出的迭代机器学习算法,通过组合多个弱分类器形成强分类器。Adaboost 通过调整样本权重,重点关注被错误分类的样本,以提高分类性能。文章还提供了代码示例,展示了如何使用决策树作为弱分类器,并在鸢尾花数据集上应用 Adaboost 分类器。此外,还讨论了Adaboost的优缺点及适用场景,强调其在分类问题上的高效性和广泛应用。
44 1
算法金 | 不愧是腾讯,问基础巨细节 。。。
|
6月前
|
算法 架构师 网络协议
对标腾讯T9架构师的 Android 面试题新鲜出炉,算法真的太重要了
对标腾讯T9架构师的 Android 面试题新鲜出炉,算法真的太重要了
|
6月前
|
存储 算法
【数据结构与算法】【腾讯阿里链表面试题】算法题--链表易懂版讲解
【数据结构与算法】【腾讯阿里链表面试题】算法题--链表易懂版讲解
|
6月前
|
存储 人工智能 算法
大数乘法的几种算法分析及比较(2014腾讯南京笔试题)
大数乘法的几种算法分析及比较(2014腾讯南京笔试题)
|
6月前
|
算法 搜索推荐
太厉害了!腾讯T4大牛把《数据结构与算法》讲透了,带源码笔记
经历过校招的人都知道,算法和数据结构都是不可避免的。 在笔试的时候,最主要的就是靠算法题。像拼多多、头条这种大公司,上来就来几道算法题,如果你没AC出来,面试机会都没有。
|
6月前
|
算法 程序员
腾讯T4纯手打《数据结构和算法》源码笔记,学完一脚踢进大厂
经历过互联网公司面试的同学大概都知道,数据结构和算法的知识技术栈是不可避免的,并且在笔试中,最重要的是靠算法题,尤其像头条这种大厂公司,上来就是算法题,答不出来的基本面试机会也不会有了。
|
算法
压缩算法 【腾讯2020校园招聘-后台&综合-第一次笔试 】
压缩算法 【腾讯2020校园招聘-后台&综合-第一次笔试 】
77 0
|
Kubernetes 算法 关系型数据库
No.3 腾讯,阿里,字节,优科面经(上-算法篇)
No.3 腾讯,阿里,字节,优科面经(上-算法篇)
下一篇
无影云桌面