oooooook 发表于 2020-8-28 00:03:53

送分题

1. 都说天降横财不是什么好事儿,这不,小甲鱼中了双色球一等奖,扣除税收后还剩下 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;
}




这里为什么是while(awards>=0)   括号里不应该是awards>0吗   如果是awards>=0的话,那么=0的情况下应该再一次循环,但是=0时候已经是一贫如洗了为什么还要循环一次

风过无痕1989 发表于 2020-8-28 00:35:18

本帖最后由 风过无痕1989 于 2020-8-28 00:48 编辑

如果没有那个等于 0,11年后还剩下 337792.77元。这个时候并非一贫如洗 ! 如若励精图治,并非没有东山再的机会。实际上此题严格来说,条件应该是:awards >= 500000,11年后虽然没有败光,但银行已经不可能再给他取 50 万了

baige 发表于 2020-8-28 07:59:49

本帖最后由 baige 于 2020-8-28 08:02 编辑

awards>0还是awards>=0在这个程序都没有区别,你可以输出一下每次循环的值,无论加不加等号结果都是一样,awards不可能等于0,它在最后一次循环从337992.758100到-174967.821252,所以>=0,>0是一样的

昨非 发表于 2020-8-28 09:20:32

=0的作用在于,将【一贫如洗】的定义范围从0~500000拉低到-500000~0
目的在于【花销次数的增加】满足【固定资产一贫如洗(就是不能是正数呗)】的条件在停止循环

Cool_Breeze 发表于 2020-8-28 11:31:11

#include <stdio.h>

int main()
{
      double awards = 4000000;
      int count = 0;

      while (awards >= 500000)
      {
                awards -= 500000;
                awards += awards * 0.08;
                ++count;
                printf("%d\t%lf\n",count,awards);
      }

      printf("%d年之后,小甲鱼败光了所有的家产,再次回到一贫如洗……\n", count);

      return 0;
}

oooooook 发表于 2020-8-28 14:10:45

昨非 发表于 2020-8-28 09:20
=0的作用在于,将【一贫如洗】的定义范围从0~500000拉低到-500000~0
目的在于【花销次数的增加】满足【固 ...

明白了谢谢
页: [1]
查看完整版本: 送分题