標籤:
一、設計思路
(1)將乘客要去的樓層數存起來。
(2)假設yi為乘客要爬樓層數之和,yi=n1*|(n1-ni)|+n2*|(n2-ni)|+..+n18*|(n18-ni)|
(3)比較y1到y18的值,找出最小的。
(4)輸出結果
二、原始碼
#include "iostream.h"#include "stdlib.h"#define MAXSIZE 15void Input(int &num,int flour[]) //輸入乘坐電梯的人數及樓層{cout<<"**************電梯調度小程式***************"<<endl; cout<<"請輸入乘坐電梯的人數(限定15人):"; cin>>num;cout<<endl; if(num>15) { cout<<"輸入錯誤!"<<endl; exit(0); } cout<<"請輸入每個人要去的層數(最高18層):"; for(int i=0;i<num;i++) { cin>>flour[i]; if(flour[i]>18) { cout<<"輸入錯誤!"<<endl; exit(0); } }}void getSmallestFlour(int num,int flour[],int &small) //計算出爬樓梯層數最少的樓層{ int sum,temp=small; int highest,lowest; highest=lowest=flour[0]; for(int i=0;i<num;i++) //找出要去的樓層中最高的樓層 { if(flour[i]>highest) { highest=flour[i]; } else //找出最低樓層 { lowest=flour[i]; } } for(i=lowest;i<=highest;i++) //從最低樓層開始遍曆直到最高樓層 { sum=0; for(int j=0;j<num;j++) { if((flour[j]-i)<0) //計算爬樓梯的層數之和 { sum=sum+i-flour[j]; } else { sum=sum+flour[j]-i; } }cout<<endl; cout<<"當電梯停在"<<i<<"層,則乘客爬樓梯的總和為"<<sum<<endl;cout<<endl; if(sum<temp) { small=i; //記錄和最小的樓層號 temp=sum; //記錄最小的和 } }}int main(int argc, char* argv[]){ int num,aver,flour[MAXSIZE]; Input(num,flour); aver=0; for(int i=0;i<num;i++) { aver+=flour[i]; } getSmallestFlour(num,flour,aver); cout<<"電梯將停在"<<aver<<"層。"<<endl;cout<<endl; return 0;}
三、運行結果
四、心得體會
雖然我認為這個電梯演算法不符合人性化,但是它最有力的解決堵塞問題。遇到問題主要是邏輯一開始有點亂。
電梯調度--c++--軟體工程