软件工程随堂小作业——(C++)

一、设计思路

  本来我的思路是根据上楼的人数和上楼的层数来计算出平均值,但是我发现这个思路不对。于是我选择了最笨的方法,复杂度为O(n2)。

(1)输入坐电梯的人数和要去的楼层;

(2)找到输入楼层里最高的,这样可以减少遍历的次数;

(3)从最低楼层开始遍历,直到最高层。内部循环计算每个人所要爬楼的层数之和,并比较找出最小的。

(4)输出结果

二、源代码

 1 // 电梯.cpp : Defines the entry point for the console application.
 2 //
 3 
 4 #include "stdafx.h"
 5 #include "iostream.h"
 6 #include "stdlib.h"
 7 #define MAXSIZE 15
 8 
 9 void Input(int &num,int flour[])                //输入乘坐电梯的人数及楼层
10 {
11     cout<<"请输入乘坐电梯的人数(限定15人):";
12     cin>>num;
13     if(num>15)
14     {
15         cout<<"输入错误!"<<endl;
16         exit(0);
17     }
18     cout<<"请输入每个人要去的层数(最高18层):";
19     for(int i=0;i<num;i++)
20     {
21         cin>>flour[i];
22         if(flour[i]>18)
23         {
24             cout<<"输入错误!"<<endl;
25             exit(0);
26         }
27     }
28 }
29 void getSmallestFlour(int num,int flour[],int &small)    //计算出爬楼梯层数最少的楼层
30 {
31     int sum,temp=small;
32     int highest,lowest;
33     highest=lowest=flour[0];
34     for(int i=0;i<num;i++)                //找出要去的楼层中最高的楼层
35     {
36         if(flour[i]>highest)
37         {
38             highest=flour[i];
39         }
40         else                            //找出最低楼层
41         {
42             lowest=flour[i];
43         }
44     }
45     for(i=lowest;i<=highest;i++)        //从最低楼层开始遍历直到最高楼层
46     {
47         sum=0;
48         for(int j=0;j<num;j++)
49         {
50             if((flour[j]-i)<0)            //计算爬楼梯的层数之和
51             {
52                 sum=sum+i-flour[j];
53             }
54             else
55             {
56                 sum=sum+flour[j]-i;
57             }
58         }
59         cout<<"若停在"<<i<<"层,则爬楼梯的总和为"<<sum<<endl;
60         if(sum<temp)
61         {
62             small=i;            //记录和最小的楼层号
63             temp=sum;            //记录最小的和
64         }
65     }
66 }
67 
68 int main(int argc, char* argv[])
69 {
70     int num,aver,flour[MAXSIZE];
71     Input(num,flour);
72     aver=0;
73     for(int i=0;i<num;i++)
74     {
75         aver+=flour[i];
76     }
77     getSmallestFlour(num,flour,aver);
78     cout<<"电梯将停在"<<aver<<"层。"<<endl;
79     return 0;
80 }

三、结果截图

四、心得体会

  上课的时候老师,讲了对这个算法进行优化,终于知道数学学得好有什么优势了。本来觉得编程与数学有关,但是关系不大,现在觉得老师说的不错,算法就是数学。以后碰到这种算法优化的或是对算法要求比较高的,可以深入研究一下。

 

posted @ 2015-04-18 22:30  JJJanepp  阅读(236)  评论(0编辑  收藏  举报