阿摩線上測驗 登入

申論題資訊

試卷:110年 - 110 經濟部所屬事業機構_新進職員甄試_資訊:1.資訊管理 2.程式設計#103708
科目:國營事業◆1.資訊管理 2.程式設計
年份:110年
排序:0

申論題內容

六、某電梯管理系統控制多台電梯,當某樓層之等待區按下按鈕時,會將其樓層號碼傳送到系統之共用Queue中,系統會定時自共用Queue中讀取一筆目標樓層號碼,並尋找離此目標樓層最近的電梯來提供服務。請使用下列所有的函式,來撰寫一 選取電梯函式SelElev,輸入為電梯的總數,其傳回為離目標樓層最近的電梯號碼,但當未選擇到電梯時,則傳回0。另外, 當電梯總數為N時,電梯號碼為1到N;樓層號碼為1代表1樓、2代表2樓、0代表地下1樓、-1代表地下2樓(依此類推)。(20分)
int getqueue()                 /* 自共用Queue中取得下一筆目標樓層號碼。其傳回為下一筆目標樓層號碼,當無資料時,則傳回999。 */
int getcurfloor(int elevid) /* 取得指定電梯目前所在的樓層。輸入為電梯號碼,其傳回為此電梯目前所在的樓層,但當此電梯不提供服務時,則傳回999。 */

詳解 (共 2 筆)

詳解 提供者:豪豪
int SelElev(int N)
{
    int target = getqueue();
    if (target == 999)
        return 0;
    int elveNum = 0;    // 電梯號碼
    int dist = INT_MAX; // 電梯與目標樓層之距離
    for (int i = 1; i <= N; i++)
    {
        int currFloor = getcurfloor(i);
        // 如果電梯不提供服務,則跳過此電梯
        if (currFloor == 999)
            continue;
        int k = abs(target - currFloor);
        dist = min(dist, k);
        // 當dist==k為true時, 表示距離更新為現在的k值, 因此要更新電梯號碼
        if (dist == k)
            elveNum = i;
    }
    // 如果所有電梯皆不提供服務,則elveNum未更新,回傳0
    if (elveNum == 0)
        return 0;
    return elveNum;
}
詳解 提供者:Grace

def SelElev(N) :
    waitfloor = getquene()
    dist = 999 //初始化距離
    m = 999 //選定的電梯
   
    for num in range(1,N) :
        runfloor = getcurfloor(num)
        if abs(waitfloor-runfloor) <= dist //距離較近的電梯
            dist = runfloor
            m = num
    
    return m