码迷,mamicode.com
首页 > 其他好文 > 详细

电梯问题

时间:2015-04-20 22:20:03      阅读:120      评论:0      收藏:0      [点我收藏+]

标签:

一、问题描述

  •石家庄铁道大学基础大楼一共有四部电梯,每层都有人上下,电梯在每层都停。信1201-1班的张一东觉得在每层都停觉得不耐烦。

  •由于楼层不太高,在上下课高峰期时时,电梯从一层上行,但只允许停在某一楼层。在一楼时,每个乘客选择自己的目的层,电梯则自动计算出应停的楼层。
  •问电梯停在那一楼层,能够保证这次乘坐电梯的所有乘客爬楼梯的层数之和最少。
二、设计思想
    根据输入楼层的不同,计算电梯停在每一个楼层时所有乘客下楼所要走的层数,每次比较求取最小值。
三、代码
 1 #include "stdafx.h"
 2 #include <stdio.h>
 3 #define HIGH 6
 4 #define N 15
 5 void scan(int Input[],int floor[],int num)                //用户输入所要到达的楼层
 6 {
 7     int i;
 8     do
 9     {
10         printf("请输入进入电梯的人数(最多15人):");
11         scanf("%d",&num);
12         if(num>15)
13             printf("您的输入有误!\n");
14     }while(num>15);
15     printf("请输入每个人到达的楼层:");
16     for(i = 0;i<num;i++)
17     {
18         scanf("%d",&Input[i]);
19     }
20     for(i=0;i<num;i++)                        //对输入的楼层进行计算
21     {
22         switch(Input[i])
23         {
24         case 1:
25             floor[Input[i]] = floor[Input[i]]+1;
26             break;
27         case 2:
28             floor[Input[i]] = floor[Input[i]]+1;
29             break;
30         case 3:
31             floor[Input[i]] = floor[Input[i]]+1;
32             break;
33         case 4:
34             floor[Input[i]] = floor[Input[i]]+1;
35             break;
36         case 5:
37             floor[Input[i]] = floor[Input[i]]+1;
38             break;
39         case 6:
40             floor[Input[i]] = floor[Input[i]]+1;
41             break;
42         default:
43             printf("楼层不对!");
44             break;
45         }
46     }
47 }
48 void count(int sum[],int floor[])                //对到达每层时要走的楼层总数计算
49 {
50     int i,j;
51     for(i=1;i<HIGH+1;i++)
52     {
53         for(j = 1;j<HIGH+1;j++)
54         {
55             if(j<=i)
56                 sum[i] = sum[i]+floor[j]*(i-j);
57             else
58                 sum[i] = sum[i]+floor[j]*(j-i);
59         }
60     }
61 }
62 void Min(int sum[])                                //求出最小的值,并输出楼层
63 {
64     int min,sign;
65     min = sum[1];
66     sign = 1;                                    //用以标记最小值所在的楼层
67     for(int i=1;i<HIGH+1;i++)
68     {
69         if(sum[i]<min)
70         {
71             min = sum[i];
72             sign = i;
73         }
74     }
75     printf("最少所走的总层数为%d,在第%d层。\n",min,sign);
76 
77 }
78 int main(int argc, char* argv[])
79 {
80     int num;                                //电梯内的人数
81     int floor[HIGH+1]={0,0,0,0,0,0,0};        //用于存放到达每层楼的人数,初始每层楼的人数是0
82     int Input[N];                            //用于存放到用户输入的楼层
83     int sum[HIGH+1]={0,0,0,0,0,0,0};
84     for(int i=0;i<0;i++)
85     {
86         Input[i] = 0;                        //初始化输入的为零
87     }
88     scan(Input,floor,num);
89     count(sum,floor);
90     Min(sum);
91     return 0;
92 }


四、运行结果

  技术分享

  五、总结

    该代码中采取的是求出每个楼层停的时候的路径长度,并求其最短长度,方法较为简单,没有什么技巧,不过实现起来比较容易。

电梯问题

标签:

原文地址:http://www.cnblogs.com/KaliLinux/p/4442734.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!