设为首页 加入收藏

TOP

?程之美??梯?度算法
2015-07-24 11:14:41 来源: 作者: 【 】 浏览:3
Tags:程之美 算法

最近想详细研究一下电梯调度算法,但是所涉及到内容太多了,目前没有时间了。

那我只能研究一下简单的了。

这是编程之美中的一道题目:

一座大厦一共有6部电梯。在高峰时间,每层都有人上下,电梯在每层都停。

实习生小飞常常会被每层都停的电梯弄得很不耐烦,于是他提出了这样的一个办法:

由于楼层并不太高,那么在繁忙的上下班时间,每次电梯从一层往上走时,我们只允许电梯停在其中的一层。所有乘客都从一楼上电梯,到达某楼层后,电梯停下来,所有乘客再从这里爬到自己的目的层。在一楼上电梯的时候,每个乘客选择自己的目的层,电梯则自动计算出应停的楼层。

问:电梯停在哪一层,能够保证这次乘坐的电梯所有乘客爬楼梯的层数之和最少。

直接贴出我用java实现的代码吧:

?

public static void main(String[] args)
	{
		for (int n = 0; n < 10; n++)
		{
			int nums[] = getInfoInOneElevator();
			System.out.println("一共有:" + nums.length + "人上楼,分别上得楼层数为:");
			for (int i = 0; i < nums.length; i++)
			{
				System.out.print(nums[i] + " ");
			}
			System.out.println("");
			int[] info = getMinTotalSteps(nums);
			System.out.println("最小步数:" + info[0]);
			System.out.println("停在楼层:" + info[1]);
			System.out.println("-----------------------------");
		}
	}

	/**
	 * 根据一电梯中人的信息,计算出最小需要爬得步数,和电梯应该停的楼层
	 */
	public static int[] getMinTotalSteps(int nums[])
	{
		int minStep = level * nums.length; // 默认都去最高层
		int nFloor = -1;
		for (int i = 0; i < level; i++)
		{
			int tempStep = 0;
			for (int j = 0; j < nums.length; j++)
			{
				tempStep += Math.abs(nums[j] - i - 1);
			}
			if (minStep > tempStep)
			{
				minStep = tempStep;
				nFloor = i + 1;
			}
		}
		return new int[] { minStep, nFloor };
	}

	/**
	 * 随机得到一批的上电梯的人,限载人13
	 */
	public static int[] getInfoInOneElevator()
	{
		// 随机上来的人数
		int[] nums = new int[(int) (Math.random() * 13)];
		for (int i = 0; i < nums.length; i++)
		{
			nums[i] = (int) (Math.random() * level) + 1;
		}
		return nums;
	}
经过10次随机模拟:

?

\

这个问题比较简单,以后有时间详细的模拟各个电梯调度算法。

】【打印繁体】【投稿】【收藏】 【推荐】【举报】【评论】 【关闭】 【返回顶部
分享到: 
上一篇SSD与HDD性能对比测试 下一篇收不到OCP纸质证书如何申请重发

评论

帐  号: 密码: (新用户注册)
验 证 码:
表  情:
内  容:

·Shell脚本:Linux Sh (2025-12-25 05:50:11)
·VMware虚拟机安装Lin (2025-12-25 05:50:08)
·Linux学习教程,Linu (2025-12-25 05:50:06)
·工业机器人TCP校准中 (2025-12-25 05:19:17)
·opc 通讯协议与 TCP (2025-12-25 05:19:15)