• 2303.计算应缴税款总额-297地平线周赛回顾


    第一题,简单的递归调用即可解决。

    可能有部分人不太熟悉递归调用,总是想到用这个方法,但不知道如何去写,我也是最近才开窍的,简要说一说吧:

    思路:

    首先、判断一道题是否可以递归调用,应该判断它是否可以拆解成无数个相同的子问题。

    以这道题为例:

    每一次进行税款计算时,都需进行   △upper  与  △income 比较,如果前者比后者大,则直接将后者乘上税率即可,如果后者比前者大,则要前者乘上税率,并继续下一次比较。

    以上这个步骤是每一次计算税款都需要经历的步骤,因此可以使用递归去解决。

    什么是△upper呢?即brackets[i][0]-brackets[i-1][0](i>=1)例:7-3;12-7;

    什么是△income呢?即income-△upper;例:10-3;7-4;

    方法确定了,变量确定了,逻辑应该怎么去用代码表示呢?

    我们需要把大问题化简为小问题,即 先想想 如果brackets.size()==1时,我们应该怎么写?

    double result=0;

    △upper=brackets[0][0]-0;

    △income=income-△upper;

    此时的税率:result+=△upper*brackets[0][1];(后者>前者)

    那ok了,那如果size==2,下一层传入的参数先更新一下:

    income=△income;

    △upper=brackets[1][0]-brackets[0][0];

    此时的税率:result+=income*brackets[1][1];

    ...【如果更多层,步骤大同小异,只要注意更新传入的参数即可

    代码:

    1. class Solution {
    2. public:
    3. const double error=1e-5;//好像没用到- -
    4. double result=0;
    5. bool flag=false;
    6. void deal_fun(vector<vector<int>>& brackets, int income,int index,int upper)//函数返回,参数
    7. {
    8. if(income<=upper) //递归三部曲--终止条件
    9. {
    10. result+=income*brackets[index][1]*0.01;
    11. flag=true;
    12. return;
    13. }
    14. result+=upper*brackets[index][1]*0.01;
    15. if(index<brackets.size()-1)//前进条件
    16. {
    17. income=income-upper;
    18. upper=brackets[index+1][0]-brackets[index][0];
    19. deal_fun(brackets,income,index+1,upper);
    20. if(flag)return;
    21. }
    22. }
    23. double calculateTax(vector<vector<int>>& brackets, int income) {
    24. deal_fun(brackets,income,0,brackets[0][0]);
    25. return result;
    26. }
    27. };

     

    最近刚刚开窍,还得努努力夯实一下!ヾ(◍°∇°◍)ノ゙加油!!

  • 相关阅读:
    (个人记录)Ensight后处理EDEM学习笔记
    智能,除了计算,还有……
    Python —— UI自动化之使用JavaScript进行元素点亮、修改、点击元素
    Java-网络编程
    Linux vim的常见基本操作
    单例模式五种写法
    基于单包授权的零信任架构下 5G+ 医疗的网络安全研究
    [原创] Go/Rust/Kotlin 的协程和队列性能评测
    R语言非参数PDF和CDF估计、非参数分位数回归分析间歇泉、GDP增长数据
    最大正方形的边长长度问题解法
  • 原文地址:https://blog.csdn.net/qq_57328462/article/details/125445195