2017-03-21 10 views
0

私のC++クラスでは、特定の変数を指定すると、家賃を最大にするアパートメントの数を返すプログラムを作成することがプログラミング練習の1つです。私のコードは、答えが正しい答えよりも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; 
} 

はoccupiedUnits番号が正しい答えのためにそれに1を追加することなく正確であるように、私が使用することができ、より良いループ構造はありますか?ありがとう。

答えて

0

ループ条件はnewProfitに依存し、newProfit計算にはoccupiedUnits - 1が必要です。ループ条件を変更するか、newProfitの計算を変更して必要なものを取得する必要があります。これを行う1つの方法は、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; 
関連する問題