一道money计算题引发的思考
网友提出一个问题如下

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

代码清单:
<?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计算题引发的思考的更多相关文章
- 一道综合渗透题引发的updatexml()注入思考
MYSQL数据库updatexml报错注入UPDATEXML (XML_document, XPath_string, new_value); 第一个参数:XML_document是String格式, ...
- 一道CTF题引发的思考——SSI注入
题目地址:http://210.32.4.22/index.php 一开始我一直考虑的用<!--#include file="文件"-->的格式进行读取文件,但是一直不 ...
- What number should I guess next ?——由《鹰蛋》一题引发的思考
What number should I guess next ? 这篇文章的灵感来源于最近技术部的团建与著名的DP优化<鹰蛋>.记得在一个月前,查到鹰蛋的题解前,我在与同学讨论时,一直试 ...
- 一个简单算法题引发的思考<DNA sorting>(about cin/template/new etc)
首先是昨天在北京大学oj网上看到一个简单的算法题目,虽然简单,但是如何完成一段高效.简洁.让人容易看懂的代码对于我这个基础不好,刚刚进入计算机行业的小白来说还是有意义的.而且在写代码的过程中,会发现自 ...
- 第6届蓝桥杯javaA组第7题,牌型种数,一道简单的题带来的思考
题目: 小明被劫持到X赌城,被迫与其他3人玩牌. 一副扑克牌(去掉大小王牌,共52张),均匀发给4个人,每个人13张. 这时,小明脑子里突然冒出一个问题: 如果不考虑花色,只考虑点数,也不考虑自己得到 ...
- 一个JAVA题引发的思考
转载自:http://www.cnblogs.com/heshan664754022/archive/2013/03/24/2979495.html 十年半山 今天在论坛闲逛的时候发现了一个很有趣的题 ...
- 一道原生js题目引发的思考(鼠标停留区块计时)
我瞎逛个啥论坛,发现了一个题目,于是本着练手的心态就开始写起来了,于是各种问题接踵而至,收获不小. 题目是这样的: Demo: mouseenter与mouseover区别demo 跨浏览器的区块计数 ...
- 解决一道leetcode算法题的曲折过程及引发的思考
写在前面 本题实际解题过程是 从 40秒 --> 24秒 -->1.5秒 --> 715ms --> 320ms --> 48ms --> 36ms --> ...
- FastAdmin Bootstrap-Table 关于客户端模式(由 计算所有页的的总数引发的思考)
Bootstrap-Table 关于客户端模式(由 计算所有页的的总数引发的思考) 昨天群里有小伙伴询问 Bootstrap-Table 有没有计算所有页的总数. [吐槽]★隔壁老王-杭州 @F4NN ...
随机推荐
- 基于UML的面向对象分析与设计
前言 经常听到有朋友抱怨,说学了UML不知该怎么用,或者画了UML却觉得没什么作用.其实,就UML本身来说,它只是一种交流工具,它作为一种标准化交流符号,在OOA&D过程 ...
- Uva 10815-Andy's First Dictionary(串)
Problem B: Andy's First Dictionary Time limit: 3 seconds Andy, 8, has a dream - he wants to produce ...
- pip install 安装提示unknown 包
pip install setuptools --upgrade should fix the issue
- tp读取器和写入器
一.读取器 控制器调用如下: //以ID的方式查询数据$user=User::get(3);//查询ID为3的单条数据echo $user->username;//以对象的方式显示对应的字段值 ...
- SQL Server2005 两台服务器上的数据库互相同步(转载)
1.1测试环境 Item 发布机 A 订阅机 B OS Windows 2003 Server Windows 2003 Server SQL SQL Server 2005 企业版 SQL Serv ...
- java中加密解密工具类
在工作中经常遇到需要加密.解密的场景.例如用户的手机号等信息,在保存到数据库的过程中,需要对数据进行加密.取出时进行解密. public class DEStool { private String ...
- sysbench的安装详解
sysbench是一个压力测试工具.可以用它来测试cpu.mem.disk.thread.mysql.postgr.oracle:然而作为一个mysql dba 我当然是用它来压测mysql啦! 一. ...
- unity, imageEffect的最后一步blit所用的shader,应该关闭zwrite和ztest
给项目组做了个imageEffect特效,结果导致ngui不显示(ugui则不存在此问题),看ngui的一些shader,其中ztest是开着的,而且ui相机的Clear Flags用的是Don't ...
- 线程相关函数(6)-pthread_cond_wait(),pthread_cond_signal(), 条件变量
pthread_cond_tpthread_cond_initpthread_cond_destroypthread_cond_waitpthread_cond_timedwaitpthread_co ...
- python 使用urllib.urlopen超时问题的解决方法
准备写一个python脚本抓取网页数据,前面抓了几个都没有什么问题,但总会抓取不完整,在中间过程中没有反应,发现执行urlopen的地方总是提示超时,百度了一下,因为我使用的是urllib不是urll ...