网友提出一个问题如下

是小学和中学时候学到了增长折线问题,有点像数学问题,不过这个要求用编程来实现,恐怕还是有些逻辑要处理的,话不多说看代码吧

我给出的代码如下

代码清单:

<?php
function get_money($year)
{$base=2000;//底薪//前三年计算for ($i=1; $i <=3 ; $i++){$base=$base*(1+0.07);if($i==$year){return $base;}}//后面几年的计算$balance_year=$year-3;for ($i=1; $i <=$balance_year ; $i++){$increase_percent=max((8+3-$year),2);//保证增长率不小于2%$base=$base*(1+$increase_percent/100);//逐年计算if($base>4000){return $base;//大于4000 立即返回
        }}return $base;
}?>

同时 总觉得这类问题应该被抽象化,毕竟规则有可能是频繁变动的,修改代码需要重新阅读和测试逻辑,这里给出面向对象的版本

代码清单如下:

<?php
class calc_money
{private $base_money=2000;private $max_money=4000;private $base_year=3;private $base_increase_percent=0.07;private $min_increase_percent=0.02;public function __construct($year){$balance_year=$year-$this->base_year;if($balance_year>0){$this->get_first_three_year_money($this->base_year);//获取前三年$this->get_balance_money($balance_year);//获取后面的几年}else{$this->get_first_three_year_money($year);//直接获取前几年
        }}private function get_balance_money($balance_year){for ($i=1; $i <= $balance_year ; $i++){ $increase_percent=$this->get_right_percent($balance_year);$this->base_money=$this->base_money*(1+$increase_percent);//逐年计算if($this->base_money>$this->max_money){break;}}}private function get_right_percent($balance_year){return max((8-$balance_year)/100,$this->min_increase_percent);//保证增长率不小于2%
    }private function get_first_three_year_money($balance_year){$this->base_money=pow(1+$this->base_increase_percent,$balance_year)*$this->base_money;}public function get_now_money(){return $this->base_money;}
}$obj=new calc_money(28);
echo $obj->get_now_money();
?>

将每个规则模块化,放入封装的私有方法来调用,避免逻辑上的混乱,为以后的代码修改和迭代打下基础。

一道money计算题引发的思考相关推荐

  1. 由一道考研基础题引发的关于对(函数导数符号在内外的区别)f‘(x)和[f(x)]‘的区别思考

    笔者今天在上课的时候,由于一道题和老师解法大相径庭而陷入思考 题目如下: 这是道02年的数学考研题目填空题第二道,事后想想确实是道非常基础的题目. 下面先奉上老师的标准解法: 很经典的换元思想. 当时 ...

  2. mysql is fashion ctf_一道CTF题引发的思考-MySQL的几个特性(续)

    0x00 背景 这两天处于转牛角尖的状态,非常不好.但是上一篇的中提到的问题总算是总结了些东西. 0x01 测试过程 (1)测试环境情况:创建了如下测试表test, mysql> select ...

  3. 一道JS面试题目引发的思考

    今看到一道有意思的题目,引发很多未知的东西,页面上有html代码如下: <body> <form id="form1" runat="server&qu ...

  4. 前置++与后置++之一道简单的题目引发的思考

    引言 昨晚一时兴起,我脑子就问自己下面的代码会输出什么,也不知道我脑子为什么有这个代码模型,只是模糊的有些印象: #include <stdio.h> #include <stdli ...

  5. python第一题 引发的思考和学习

    题目如下: **第 0000 题:**将你的 QQ 头像(或者微博头像)右上角加上红色的数字,类似于微信未读信息数量那种提示效果. import matplotlib.pyplot as plt # ...

  6. 由动态规划计算编辑距离引发的思考

    简单介绍 编辑距离算法: https://www.cnblogs.com/BlackStorm/p/5400809.html https://wizardforcel.gitbooks.io/the- ...

  7. php中unset面试题,php unset和引用——由一道php面试题引发的思考

    $test="aaaaa"; $abc=&$test; unset($test); echo $abc; 为什么结果会输出aaaaa呢,$test不是销毁了吗?$abc引用 ...

  8. 一道概率题引发对考研数学复习的思考

    一道概率题引发对考研数学复习的思考 知识回顾 如题,今天上午我兴致勃勃地拿出2006年数学一做了起来.做前面还算顺利,直到最后那道概率题,关于极大似然估计的题目,我的内心:艹了,这怎么跟之前做的不一样 ...

  9. 三只青蛙的故事:一道脑筋急转弯题目引发的思考

    一道脑筋急转弯题目是这样的:有三只青蛙在河中的一片叶子上顺水漂流.其中一只想跳到河里.在叶子上还剩几只青蛙? 大多数人会回答还有两只.(我刚看到此题时认为一只也没有,因为一只青蛙跳了之后剩下的两只也会 ...

  10. java语言编程三角形图形_编程题:编写程序输入三角形的3条边长,计算并输出... 求助一道JAVA编程题:编写一个类似记事本的图形用......

    导航:网站首页 > 编程题:编写程序输入三角形的3条边长,计算并输出... 求助一道JAVA编程题:编写一个类似记事本的图形用... 编程题:编写程序输入三角形的3条边长,计算并输出... 求助 ...

最新文章

  1. 黄聪:在C#中如何使用资源中的图片
  2. Error:依赖版本不一致
  3. 中文代码编写php,PHP开发网站代码编写规范
  4. Oracle查询一个范围,oracle字段范围查询
  5. UGUI的Canvas
  6. 小米 android 7.0下载地址,小米5安卓7.0公测版固件下载地址 仅限开发版
  7. dw网页制作的基本步骤_网页制作一般使用哪些工具?DW使用方法教学?
  8. Ubuntu 语言配置修改为英文
  9. 【论文阅读】3D Topology-Preserving Segmentation with Compound Multi-Slice Representation
  10. 树形结构最优化问题:后根遍历
  11. 战疫之下的“大数据+网格化”管理,谁在颠覆“智能城市”的路径?
  12. 换网线IP地址会改变吗?
  13. java word转pdf【去水印】
  14. 钛资本研究院:企业服务市场资产的平衡计分卡
  15. 嵌入式程序员的几年的小心得
  16. java-图书Marc文件导入处理
  17. SAP供应商 供货方和开票方不一致的强控
  18. react--随笔3
  19. mysql数据库的事务 acid 隔离级别 脏读 脏写 幻读 不可重复读
  20. 第五届河南省CCPC河南省省赛题解+复盘

热门文章

  1. docker managed volume - 每天5分钟玩转 Docker 容器技术(40)
  2. lucene3.5学习笔记03--待续
  3. [转]瀑布流布局浅析
  4. iOS/Android React Native 配置教程
  5. Word 2016问题导致无法创建其他博客账号
  6. ubuntu16.04安装mongodb
  7. Rails的静态资源管理
  8. 包邮送50本数据分析、MySQL、Python相关书籍!
  9. 悬赏数据控!2018网易有数可视化大赛火热开启!
  10. 二十三种设计模式[4] - 原型模式(Prototype Pattern)