《编程之美》学而思 - 小飞的电梯调度算法
2017-07-12 16:25
741 查看
《编程之美》学而思 - 小飞的电梯调度算法
flyifsh
书中题目
亚洲微软研究院所在的希格玛大厦一共有6部电梯。在高峰时间,每层都有人上下,电梯每层都停。实习生小飞常常会被
每层都停的电梯弄的很不耐烦,于是他提出了这样一个办法:
由于楼层并不算太高,那么在繁忙的上下班时间,每次电梯从一层往上走时,我们只允许电梯停在其中的某一层。所有乘
客从一楼上电梯,到达某层后,电梯停下来,所有乘客再从这里爬楼梯到自己的目的层。在一楼的时候,每个乘客选择自
己的目的层,电梯则计算出应停的楼层。 问:电梯停在哪一层楼,能够保证这次乘坐电梯的所有乘客爬楼梯的层数之和最少?
非书中解答方法
1个人的时候不用分析,想上几楼上几楼
x1,x2,x3…xn 分别表示想上的楼层从大大小排序
假设2个人的时候,x1 想要上2楼,x2想要上6楼
看坐标轴,2到6之间取任何的点,该点到2和6之间的和是相等的,
假设停在该楼层 |x1要爬的楼层 |x2要爬的楼层
2 | 0 | 4
3 | 1 | 3
4 | 2 | 2
5 | 3 | 1
6 | 4 | 0
| x2 - x1 |所得到值
所以答案是电梯停的楼层是2到6任意一层
假设有三个人 x1,x2,x3
x1=2 想去2楼
x2 = 4 想去4楼
x3 = 6 想去6楼
坐标轴上,x1到x3之间取任何的点,该点到x1和x3之间的和是相等的
所以停的楼层是x2要去的楼层
假设有四个人 x1,x2,x3,x4
x1 = 2 想去2楼
x2 = 4 想去4楼
x3 = 5 想去5楼
x4 = 6 想去6楼
坐标轴上,x1到x4之间取任何的点,该点到x1和x4之间的和是相等的
坐标轴上,x2到x3之间取任何的点,该点到x2和x3之间的和是相等的
所以答案是4,5任意层
答案分情况
1个人
2个人 答案已说明
假设n个人
开始分段,保证到
最高的楼层与最低楼层为一段,第二高的楼层与第二低楼层为一段,以此类推
坐标轴上,x1到xn之间取任何的点,该点到x1和xn之间的和是相等的
坐标轴上,x2到x(n-1)之间取任何的点,该点到x1和x(n-1)之间的和是相等的
…
答案就出现了,还要分情况
n分别是奇数偶数的时候
n是奇数的时候,就是分段完之后,剩的中间那个
n是偶数的时候,就是分段完之后,答案就是最后那段(就是中间那段),答案至少是2个,包括这个点之间所有的正整数
代码实现
flyifsh
书中题目
亚洲微软研究院所在的希格玛大厦一共有6部电梯。在高峰时间,每层都有人上下,电梯每层都停。实习生小飞常常会被
每层都停的电梯弄的很不耐烦,于是他提出了这样一个办法:
由于楼层并不算太高,那么在繁忙的上下班时间,每次电梯从一层往上走时,我们只允许电梯停在其中的某一层。所有乘
客从一楼上电梯,到达某层后,电梯停下来,所有乘客再从这里爬楼梯到自己的目的层。在一楼的时候,每个乘客选择自
己的目的层,电梯则计算出应停的楼层。 问:电梯停在哪一层楼,能够保证这次乘坐电梯的所有乘客爬楼梯的层数之和最少?
非书中解答方法
1个人的时候不用分析,想上几楼上几楼
x1,x2,x3…xn 分别表示想上的楼层从大大小排序
假设2个人的时候,x1 想要上2楼,x2想要上6楼
看坐标轴,2到6之间取任何的点,该点到2和6之间的和是相等的,
假设停在该楼层 |x1要爬的楼层 |x2要爬的楼层
2 | 0 | 4
3 | 1 | 3
4 | 2 | 2
5 | 3 | 1
6 | 4 | 0
| x2 - x1 |所得到值
所以答案是电梯停的楼层是2到6任意一层
假设有三个人 x1,x2,x3
x1=2 想去2楼
x2 = 4 想去4楼
x3 = 6 想去6楼
坐标轴上,x1到x3之间取任何的点,该点到x1和x3之间的和是相等的
所以停的楼层是x2要去的楼层
假设有四个人 x1,x2,x3,x4
x1 = 2 想去2楼
x2 = 4 想去4楼
x3 = 5 想去5楼
x4 = 6 想去6楼
坐标轴上,x1到x4之间取任何的点,该点到x1和x4之间的和是相等的
坐标轴上,x2到x3之间取任何的点,该点到x2和x3之间的和是相等的
所以答案是4,5任意层
答案分情况
1个人
2个人 答案已说明
假设n个人
开始分段,保证到
最高的楼层与最低楼层为一段,第二高的楼层与第二低楼层为一段,以此类推
坐标轴上,x1到xn之间取任何的点,该点到x1和xn之间的和是相等的
坐标轴上,x2到x(n-1)之间取任何的点,该点到x1和x(n-1)之间的和是相等的
…
答案就出现了,还要分情况
n分别是奇数偶数的时候
n是奇数的时候,就是分段完之后,剩的中间那个
n是偶数的时候,就是分段完之后,答案就是最后那段(就是中间那段),答案至少是2个,包括这个点之间所有的正整数
代码实现
#include "stdafx.h" #include <iostream> #include <vector> #include <algorithm> using namespace std; int _tmain(int argc, _TCHAR* argv[]) { std::vector<int> f = { 2, 4, 5, 6};//测试使用数据 4个人要去的楼层 std::sort(f.begin(), f.end()); int n = f.size(); //n>2 if (n%2)//odd 基数 { //输出答案 std::cout << f[n/2];//n/2 取整数 } else//even { int end= n / 2; int before = end - 1; //输出答案 for (int i = f[before]; i <= f[end]; i++) { std::cout << i<<std::endl;//n/2 取整数 } } system("pause"); return 0; }
相关文章推荐
- 编程之美——小飞的电梯调度算法之新解(中位数)
- 编程之美 1.8小飞的电梯调度算法的第三种解
- 编程之美:小飞的电梯调度算法
- 《编程之美》小飞的电梯调度算法
- 编程之美:小飞的电梯调度算法
- 小飞的电梯调度算法@编程之美
- 《编程之美》小飞的电梯调度算法
- 小飞的电梯调度算法(编程之美)
- 《编程之美》中“小飞的电梯调度算法”停k层的解法
- 编程之美:小飞的电梯调度算法
- 《编程之美》读书笔记之[小飞电梯调度算法]
- 编程之美——小飞的电梯调度算法之新解
- 课外娱乐__《编程之美》之小飞的电梯调度算法
- 编程之美1.8:小飞的电梯调度算法
- 《编程之美》读书笔记04: 1.8 小飞的电梯调度算法
- 编程之美——小飞的电梯调度算法
- 编程之美:小飞的电梯调度
- 《编程之美》学而思-精确表达浮点数
- 编程之美之小飞的电梯调度算法(多种解法)---Java语言
- 编程之美读书笔记——1.8小飞的电梯调度算法