房地产办公室处理50个公寓单位。当租金为每月600美元时,所有单位都被占用。但是,每增加40美元的租金,一个单位就会空置。每个占用单位平均需要27美元的维护费用。应该租用多少单位以最大化利润
import java.util.*;
import java.io.*;
public class ChapterFiveHomework
{
static Scanner console = new Scanner(System.in);
public static void main(String[] args) throws FileNotFoundException
{
int units;
double rent;
double startRent;
double rentInc;
double maintenance;
double totalMaintenance;
double earnings;
double earnings2;
System.out.println("Enter the number of appartment units.");
units = console.nextInt();
System.out.println("Enter the rent ammount when all units are occupied.");
rent = console.nextDouble();
System.out.println("Enter the increase in rent that results in a vacant"
+" unit.");
rentInc = console.nextDouble();
System.out.println("Enter the ammount to maintain a rented unit.");
maintenance = console.nextDouble();
earnings2 = (units-1)*(rent+rentInc)-maintenance*(units-1);
earnings = units*rent-maintenance*units;
do
{
units--;
rent = rent+rentInc;
earnings = (units--)*(rent+rentInc)-(maintenance*(units--));
}
while (earnings > earnings2);
System.out.println("Number of units to rent:" + (units));
System.out.printf("Ammount to charge for rent: %.2f", rent);
}
}
答案 0 :(得分:0)
我在这里看到几个立即问题:
do
{
units--;
rent = rent+rentInc;
earnings = (units--)*(rent+rentInc)-(maintenance*(units--));
}
while (earnings > earnings2);
首先,您正在根据已经腾出的公寓进行第一次计算。这意味着你没有考虑600美元租金是最好的选择。
其次,每次通过该循环,你都会减少units
三次。
第三,你正在终止盈利不再上升的循环。虽然在此特定情况下无关紧要,但您应该了解局部最大值的问题。
例如,如果数字为1, 2, 3, 2, 9999
,那么当您找到第二个2
而不是继续9999
时,您的循环就会停止。
在我看来,这是最简单的方法。基本上,你有一个以$ 600租金开头的循环。虽然可以说639美元将是正确的起点,因为只有 $ 40 增加会导致“失去”第一套公寓,为了简单起见,我将保持600美元。循环也从完全占用开始。
每次循环,你根据你的公式计算利润,然后将租金增加40美元,并将占用率减少一,直到占用率达到零。
你实际上非常接近那个,除了我上面提到的问题,所以希望相对容易改变循环你必须等同于下面的伪代码:
# Configurable items.
rentbase = 600
rentincr = 40
numapts = 50
expsper = 27
maxprofit = -1
maxoccupancy = -1
maxrentper = -1
rentper = rentbase
occupancy = 50
while occupancy > 0:
income = rentper * occupancy
expense = expsper * occupancy
profit = income - expense
print occupancy, rentper, profit
if maxprofit < profit:
maxprofit = profit
maxoccupancy = occupancy
maxrentper = rentper
rentper = rentper + rentincr
occupancy = occupancy - 1
print "==="
print maxoccupancy, maxrentper, maxprofit
使用这种方法,32套公寓的正确答案似乎为1,320美元,租金为41,376美元。