马上注册,结交更多好友,享用更多功能^_^
您需要 登录 才可以下载或查看,没有账号?立即注册
x
题目:都说天降横财不是什么好事儿,这不,小甲鱼中了双色球一等奖,扣除税收后还剩下 400 万人民币。假设小甲鱼把这些钱做固定投资,每年可 以获得 8% 的红利,但在每年的第一天,小甲鱼都会取出 50 万作为本年度的开销……
请编写一个程序,计算需要多久小甲鱼才会败光所有家产,再次回到一贫如洗?
小甲鱼的答案:#include <stdio.h>
int main()
{
double awards = 4000000;
int count = 0;
while (awards >= 0)
{
awards -= 500000;
awards += awards * 0.08;
count++;
}
printf("%d年之后,小甲鱼败光了所有的家产,再次回到一贫如洗……\n", count);
return 0;
}
我的程序:#include <stdio.h>
#define MONEY 4000000
int main()
{
int count = 0;
double total =MONEY;
do
{
total -= 500000;
total += MONEY*0.08;
count++;
}while(total>=0);
printf("%d年之后,小甲鱼败光了所有的家产,再次回到一贫如洗.....\n",count);
return 0;
}
答案是12年,我的程序是23年,能看出来是什么问题哪里出错了吗?
你的程序出错的地方在于计算每年的红利时使用了固定的MONEY值,而不是每年剩余的资产total。这导致了每年的红利计算错误,因此结果出现了偏差。
在小甲鱼的程序中,他使用了awards来保存每年的剩余资产,并在计算红利时使用了awards的值。这样可以确保每年的红利都是基于剩余资产计算的。
你可以将你的程序修改为:#include <stdio.h>
#define MONEY 4000000
int main()
{
int count = 0;
double total = MONEY;
do
{
total -= 500000;
total += total * 0.08;
count++;
} while(total >= 0);
printf("%d年之后,小甲鱼败光了所有的家产,再次回到一贫如洗...\n", count);
return 0;
}
这样修改后,你的程序应该能够得到正确的结果,即12年。
|