2017-03-21 5 views
0

제 C++ 클래스의 경우, 특정 변수가 주어지면 임대 할 아파트를 최대로 늘리는 프로그램을 만드는 것이 좋습니다. 대답은 정답보다 하나 낮은 것을 제외하면 내 코드는 작동합니다. 여기 내 코드는 : 나는 occupiedUnits 번호가 정답을 위해 1을 추가 할 필요없이 올바른지 때문에 사용할 수있는 더 나은 루프 구조는임대하고자하는 최대 아파트 수를 계산하는 프로그램을 최적화하십시오.

// ch5ProgExercise28.cpp : Defines the entry point for the console application. 
// 

#include "stdafx.h" 
#include <iostream> 

using namespace std; 

int main() 
{ 
    int totalUnits, occupiedUnits, vacantUnits; 
    double rentAllOccupied, rentIncreaseVacant, maintenance, oldProfit, newProfit; 

    cout << "Enter the total number of units, the rent to occupy all the units," 
     << " the increase in rent that results in a vacant unit, and the amount" 
     << " to maintain a rented unit."; 
    cin >> totalUnits >> rentAllOccupied >> rentIncreaseVacant >> maintenance; 
    oldProfit = ((rentAllOccupied)*totalUnits) - (maintenance*totalUnits); 
    occupiedUnits = totalUnits; 
    vacantUnits = totalUnits - occupiedUnits; 
    do 
    { 
     oldProfit = (rentAllOccupied + (rentIncreaseVacant*vacantUnits))* 
      occupiedUnits - (maintenance*occupiedUnits); 
     occupiedUnits--; 
     vacantUnits = totalUnits - occupiedUnits; 
     newProfit = (rentAllOccupied + (rentIncreaseVacant*vacantUnits))* 
      occupiedUnits - (maintenance*occupiedUnits); 
    } while (oldProfit < newProfit); 
    occupiedUnits += 1; 
    cout << "To maximize profits, " << occupiedUnits << " units will be rented." << endl; 
    cin >> oldProfit; //stops the program from exiting right away 
    return 0; 
} 

있습니까? 감사.

답변

0

루프 조건은 newProfit에 따라 달라지며 newProfit 계산에는 occupiedUnits - 1이 필요합니다. 루프 상태 또는 newProfit의 계산을 변경하여 원하는 결과를 얻으십시오. 이를 수행하는 한 가지 방법은 occupiedUnits의 모든 값을 반복하고 최대 이익과 단위를 새 변수에 저장하는 것입니다. 테스트 조건을 제공하지 않았지만 다음과 같이 작동해야합니다.

double maxProfit = 0; 
int maxUnits = 0; 

while(occupiedUnits > 0) 
{ 
    oldProfit = (rentAllOccupied + (rentIncreaseVacant*vacantUnits))* 
     occupiedUnits - (maintenance*occupiedUnits); 
    occupiedUnits--; 
    vacantUnits = totalUnits - occupiedUnits; 
    newProfit = (rentAllOccupied + (rentIncreaseVacant*vacantUnits))* 
     occupiedUnits - (maintenance*occupiedUnits); 

    if (newProfit > maxProfit) 
    { 
     maxProfit = newProfit; 
     maxUnits = occupiedUnits + 1; 
    } 
} 
cout << "To maximize profits, " << maxUnits << " units will be rented." << endl;