网友提出一个问题如下

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

我给出的代码如下

代码清单:

<?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. 一道综合渗透题引发的updatexml()注入思考

    MYSQL数据库updatexml报错注入UPDATEXML (XML_document, XPath_string, new_value); 第一个参数:XML_document是String格式, ...

  2. 一道CTF题引发的思考——SSI注入

    题目地址:http://210.32.4.22/index.php 一开始我一直考虑的用<!--#include file="文件"-->的格式进行读取文件,但是一直不 ...

  3. What number should I guess next ?——由《鹰蛋》一题引发的思考

    What number should I guess next ? 这篇文章的灵感来源于最近技术部的团建与著名的DP优化<鹰蛋>.记得在一个月前,查到鹰蛋的题解前,我在与同学讨论时,一直试 ...

  4. 一个简单算法题引发的思考<DNA sorting>(about cin/template/new etc)

    首先是昨天在北京大学oj网上看到一个简单的算法题目,虽然简单,但是如何完成一段高效.简洁.让人容易看懂的代码对于我这个基础不好,刚刚进入计算机行业的小白来说还是有意义的.而且在写代码的过程中,会发现自 ...

  5. 第6届蓝桥杯javaA组第7题,牌型种数,一道简单的题带来的思考

    题目: 小明被劫持到X赌城,被迫与其他3人玩牌. 一副扑克牌(去掉大小王牌,共52张),均匀发给4个人,每个人13张. 这时,小明脑子里突然冒出一个问题: 如果不考虑花色,只考虑点数,也不考虑自己得到 ...

  6. 一个JAVA题引发的思考

    转载自:http://www.cnblogs.com/heshan664754022/archive/2013/03/24/2979495.html 十年半山 今天在论坛闲逛的时候发现了一个很有趣的题 ...

  7. 一道原生js题目引发的思考(鼠标停留区块计时)

    我瞎逛个啥论坛,发现了一个题目,于是本着练手的心态就开始写起来了,于是各种问题接踵而至,收获不小. 题目是这样的: Demo: mouseenter与mouseover区别demo 跨浏览器的区块计数 ...

  8. 解决一道leetcode算法题的曲折过程及引发的思考

    写在前面 本题实际解题过程是 从 40秒 --> 24秒 -->1.5秒 --> 715ms --> 320ms --> 48ms --> 36ms --> ...

  9. FastAdmin Bootstrap-Table 关于客户端模式(由 计算所有页的的总数引发的思考)

    Bootstrap-Table 关于客户端模式(由 计算所有页的的总数引发的思考) 昨天群里有小伙伴询问 Bootstrap-Table 有没有计算所有页的总数. [吐槽]★隔壁老王-杭州 @F4NN ...

随机推荐

  1. Java注解总结

    注解是Spring和Mybatis框架所大量使用的技术,要想掌握框架相关技术,注解是必须要掌握的. 掌握注解的优势: 1.能够读懂别人写的代码,特别是框架相关的代码. 2.本来可能需要很多配置文件,需 ...

  2. 工作总结 @Html 辅助方法 为 生成的 标签设置元素属性 htmlAttributes 一个对象,其中包含要为该元素设置的 HTML 特性。

    @Html.RadioButtonFor(m => m.IsJianChe, true, new { @style = "width: 18px; height: 18px;" ...

  3. C++:CursorType光标类型 和 LockType锁定类型

    简要: CursorType光标类型: 1.   AdOpenForwardOnly   (默认值)一次只能向前移动一行. 2.   AdOpenKeyset   打开键集类型游标. 3.   AdO ...

  4. 构造矩阵解决这个问题 【nyoj299 Matrix Power Series】

    矩阵的又一个新使用方法,构造矩阵进行高速幂. 比方拿 nyoj299 Matrix Power Series 来说 给出这样一个递推式: S = A + A2 + A3 + - + Ak. 让你求s. ...

  5. B/S打印解决方案参考

    使用Lodop 插件,该插件占用8000端口,未使用过,仅知依赖浏览器打印 http://blog.csdn.net/harderxin/article/details/17262945 强大的web ...

  6. nodejs http代理请求

    一些免费到代理地址 http://www.xicidaili.com/nn https://proxy.l337.tech/txt http://www.66ip.cn/nm.html 以下代码可以测 ...

  7. scikit-learn:在实际项目中用到过的知识点(总结)

    零.全部项目通用的: http://blog.csdn.net/mmc2015/article/details/46851245(数据集格式和预測器) http://blog.csdn.net/mmc ...

  8. php排序函数学习

    sort() 函数按升序对给定数组的值排序. 注释:本函数为数组中的单元赋予新的键名.原有的键名将被删除. 如果成功则返回 TRUE,否则返回 FALSE. <?php$my_array = a ...

  9. android.view.animation(2) - 插值器Interpolator

    public interface Interpolator implements TimeInterpolator android.view.animation.Interpolator Known ...

  10. JS学习笔记(2)--正则表达式获取指定字符串

    js 正则提取字串 这里就有:SA 怎么用正则提取sa出来 var str=“这里就有:SA ”怎么用正则提取sa出来 YDhcui | 浏览 2087 次 推荐于2016-05-30 18:25:4 ...