2015-11-06 78 views
0

基本上,我有一個理解問題的問題。字符的結構和字符串

所以我試圖刺激一些電梯。

  • 最初,所有電梯是在一樓用0乘客內部 和0的使用(即,沒有人用它們尚未完成)。

  • 給定一系列的樓層號碼,電梯一個接一個地去到
    對應的樓層。

  • 如果電梯從較低樓層到較高樓層m,乘客將嘗試進入電梯。但是,一旦電梯中的乘客人數達到15人,這就是電梯的容量,沒有額外的乘客就能夠進入電梯。

  • 如果與對乘客的電梯從較高的樓層進入較低 地板N,N(或P中較小的一個)的乘客將退出
    電梯。應使用電梯計算出離開電梯
    的實際乘客數量,該乘客數量已完成 。

然後,我試圖打印出相應的樓層,乘客人數和使用情況。

Enter number of elevators: 1 
Enter sequence for elevator 1: 24653  
Elevator 1: 
Floor: 3 
Number of passengers: 4 
Usage: 8 
Most used elevator: 1 

Enter number of elevators: 2 
Enter sequence for elevator 1: 24653 
Enter sequence for elevator 2: 798635 
Elevator 1: 
Floor: 3 
Number of passengers: 4 
Usage: 8 
Elevator 2: 
Floor: 5 
Number of passengers: 5 
Usage: 15 
Most used elevator: 2 

我需要我的功能「runElevators」和「goToFloor」因爲我不知道什麼是他們需要幫助。我認爲我在「runElevators」中做了一些錯誤,但我不確定究竟是什麼。

我明白,字符「2」並不意味着整數「2」,但我似乎無法解決它。

任何幫助將不勝感激。謝謝!

#include <stdio.h> 
#include <string.h> 
#define CAPACITY 15 
#define MAX_LEN 21 
#define MAX_ELEVATORS 5 

typedef struct { 
    int floor, passenger, usage; 
} elevator_t; 

void setupElevators(elevator_t [], int); 
void readSequences(char [][MAX_LEN], int); 
void runElevators(elevator_t [], char [][MAX_LEN], int); 
void goToFloor(elevator_t *, int); 
void printElevators(elevator_t [], int size); 
int mostUsedElevator(elevator_t [], int); 

// This function is given. You are NOT to modify it. 
int main(void){ 
    int size; 
    elevator_t elevators[MAX_ELEVATORS]; 
    char sequences[MAX_ELEVATORS][MAX_LEN]; 

    printf("Enter number of elevators: "); 
    scanf("%d", &size); 

    setupElevators(elevators, size); 
    readSequences(sequences, size); 

    runElevators(elevators, sequences, size); 

    printElevators(elevators, size); 
    printf("Most used elevator: %d\n", mostUsedElevator(elevators, size)); 

    return 0; 
} 

void setupElevators(elevator_t elevators[], int size){ 

    int i; 

    for(i = 0; i < size; i++) 
    { 
     elevators[i].floor = 1; 
     elevators[i].passenger = 0; 
     elevators[i].usage = 0; 
    } 
} 

// Read in the sequences of floors the elevators go to. 
// This function is given. You are NOT to modify it. 
void readSequences(char sequences[][MAX_LEN], int size){ 
    int i; 

    for (i = 0; i<size; i++){ 
     printf("Enter sequence for elevator %d: ", i+1); 
     scanf("%s", sequences[i]); 
    } 
} 

void runElevators(elevator_t elevators[], char sequences[][MAX_LEN], int size){ 


    int i, c; 

    for(i = 0; i < size; i++) 
     for(c = 0; c < strlen(sequences[i]); c++) 
     { 
      elevators[i].floor = sequences[i][strlen(sequences[i]) - 1]; 

      if((elevators[i].passenger < 15) && (sequences[i][c+1] > sequences[i][c])) 
       elevators[i].passenger += sequences[i][c]; 

      if(elevators[i].passenger > 15) 
       elevators[i].passenger = 15; 

      if((elevators[i].passenger > 0) && (sequences[i][c] > sequences[i][c+1])) 
       elevators[i].passenger -= sequences[i][c+1]; 

      if(sequences[i][c] > sequences[i][c+1]) 
       elevators[i].usage += sequences[i][c+1]; 
     } 

} 


void goToFloor(elevator_t *elevator, int floor){ 




} 
void printElevators(elevator_t elevators[], int size){ 

    int i; 

    for(i = 0; i < size; i++) 
    { 
     printf("Elevator : %d\n", i+1); 
     printf("Floor: %d\n", elevators[i].floor); 
     printf("Number of passengers: %d\n", elevators[i].passenger) ; 
     printf("Usage: %d\n", elevators[i].usage); 
    } 
} 

int mostUsedElevator(elevator_t elevators[], int size){ 
    // Incomplete 
    return 1; 
} 
+0

請說明您的問題具體地講,我不明白是怎麼回事。解釋你的期望和實際發生的情況。另外,'for(c = 0; c

+0

「我認爲我做錯了什麼」。你能詳細說明一下嗎?描述輸入,預期行爲和實際行爲。 – kaylum

回答

0
void runElevators(elevator_t elevators[], char sequences[][MAX_LEN], int size) 
{ 
    int i, c; 
    int prevFloor, currFloor; 

    for(i = 0; i < size; i++) 
    { 
     for(c = 0; c < strlen(sequences[i]); c++) 
     { 
      prevFloor = elevators[i].floor; 
      currFloor = sequences[i][c] - '0'; 

      if (currFloor > prevFloor) 
      { 
       // Elevator going UP, passengers will enter the elevator 
       int numPassengerToEnter; 

       // Max capacity of elevator is CAPACITY (=15) 
       numPassengerToEnter = CAPACITY - elevators[i].passenger; 

       // At floor m, only m passengers (= currFloor) are available (to enter elevator) 
       if (numPassengerToEnter < currFloor) 
       { 
        elevators[i].passenger += numPassengerToEnter; 
       } 
       else 
       { 
        elevators[i].passenger += currFloor; 
       } 
      } 
      else if (currFloor < prevFloor) 
      { 
       // Elevator going DOWN, passengers will exit the elevator 
       int numPassengerToExit; 

       // Smaller of (Current floor number n) and (current number of passenger in elevator) will exit the elevator 
       if (elevators[i].passenger < currFloor) 
       { 
        numPassengerToExit = elevators[i].passenger; 
       } 
       else 
       { 
        numPassengerToExit = currFloor; 
       } 

       elevators[i].passenger -= numPassengerToExit; 
      } 

      // Update current floor of elevator 
      elevator[i].floor = currFloor; 
     } 
}