【题目来源】洛谷B4552 [GESP202606 一级] 交税 - 洛谷【题目描述】根据国家税收相关规定劳务报酬需要按月预交个税预交税率如下劳务报酬不超过800 800800的不需要预交个税劳务报酬超过800 800800的仅超过800 800800的部分按照20 % 20\%20%即0.2 0.20.2税率预交个税不超过800 800800的部分不需要预交个税例如月劳务报酬为1000.0 1000.01000.0则按照规则2 22需要预交个税( 1000.0 − 800.0 ) × 20 % 40.00 (1000.0 - 800.0) \times 20\% 40.00(1000.0−800.0)×20%40.00。现在给定小杨同学12 1212个月的月度劳务报酬请帮小杨同学计算他这12 1212个月应预交个税的总和。【输入】输入12 1212行每行一个浮点数表示小杨同学12 1212个月中每个月的劳务报酬。每个浮点数恰好有一位小数。【输出】输出1 11行一个浮点数保留两位小数表示小杨同学12 1212个月应预交个税的总和。【输入样例】932.0 1634.3 1790.4 2172.9 378.1 283.4 2761.9 3583.5 10.1 2324.9 1111.6 3812.3【输出样例】2584.76【核心思想】问题分析给定12 1212个月的劳务报酬每个月的个税计算规则为分段函数若报酬x ≤ 800 x \leq 800x≤800个税为0 00若x 800 x 800x800个税为( x − 800 ) × 0.2 (x - 800) \times 0.2(x−800)×0.2。需要累加12 1212个月的个税并保留两位小数输出。本质是简单的分段函数求和。算法选择直接模拟逐月读取报酬按规则计算当月个税并累加关键步骤初始化累计个税a n s 0 ans 0ans0逐月处理循环i ii从1 11到12 1212读取当月劳务报酬x xx若x 800 x 800x800a n s ← a n s ( x − 800 ) × 0.2 ans \leftarrow ans (x - 800) \times 0.2ans←ans(x−800)×0.2若x ≤ 800 x \leq 800x≤800不增加个税为0 00输出结果保留两位小数输出a n s ansans时间/空间复杂度时间复杂度O ( 12 ) O ( 1 ) O(12) O(1)O(12)O(1)固定次数的输入和计算空间复杂度O ( 1 ) O(1)O(1)仅使用两个浮点变量分段函数模拟的核心思想阈值判断以800 800800为分界点将连续的数值域划分为两个区间分别对应不同的计算规则线性累加每个月的个税计算相互独立无跨月依赖因此直接遍历累加即可浮点精度控制输入为一位小数输出要求两位小数使用double类型配合格式化输出%.2lf即可满足精度要求适用于规则明确、无状态依赖的简单税务/费用计算问题【算法标签】#入门 #模拟【代码详解】#includebits/stdc.husingnamespacestd;doublex,ans;// x: 每个月的劳务报酬; ans: 累计应预交的个税总和intmain(){for(inti1;i12;i)// 循环处理 12 个月的劳务报酬{cinx;// 读入当前月的劳务报酬if(x800)// 如果劳务报酬超过 800超过部分需要预交个税ans(x-800)*0.2;// 累加超过 800 部分的 20% 税率}printf(%.2lf,ans);// 输出 12 个月预交个税总和保留两位小数return0;}【运行结果】932.0 1634.3 1790.4 2172.9 378.1 283.4 2761.9 3583.5 10.1 2324.9 1111.6 3812.3 2584.76
题解:洛谷 B4552 [GESP202606 一级] 交税
发布时间:2026/7/4 20:57:58
【题目来源】洛谷B4552 [GESP202606 一级] 交税 - 洛谷【题目描述】根据国家税收相关规定劳务报酬需要按月预交个税预交税率如下劳务报酬不超过800 800800的不需要预交个税劳务报酬超过800 800800的仅超过800 800800的部分按照20 % 20\%20%即0.2 0.20.2税率预交个税不超过800 800800的部分不需要预交个税例如月劳务报酬为1000.0 1000.01000.0则按照规则2 22需要预交个税( 1000.0 − 800.0 ) × 20 % 40.00 (1000.0 - 800.0) \times 20\% 40.00(1000.0−800.0)×20%40.00。现在给定小杨同学12 1212个月的月度劳务报酬请帮小杨同学计算他这12 1212个月应预交个税的总和。【输入】输入12 1212行每行一个浮点数表示小杨同学12 1212个月中每个月的劳务报酬。每个浮点数恰好有一位小数。【输出】输出1 11行一个浮点数保留两位小数表示小杨同学12 1212个月应预交个税的总和。【输入样例】932.0 1634.3 1790.4 2172.9 378.1 283.4 2761.9 3583.5 10.1 2324.9 1111.6 3812.3【输出样例】2584.76【核心思想】问题分析给定12 1212个月的劳务报酬每个月的个税计算规则为分段函数若报酬x ≤ 800 x \leq 800x≤800个税为0 00若x 800 x 800x800个税为( x − 800 ) × 0.2 (x - 800) \times 0.2(x−800)×0.2。需要累加12 1212个月的个税并保留两位小数输出。本质是简单的分段函数求和。算法选择直接模拟逐月读取报酬按规则计算当月个税并累加关键步骤初始化累计个税a n s 0 ans 0ans0逐月处理循环i ii从1 11到12 1212读取当月劳务报酬x xx若x 800 x 800x800a n s ← a n s ( x − 800 ) × 0.2 ans \leftarrow ans (x - 800) \times 0.2ans←ans(x−800)×0.2若x ≤ 800 x \leq 800x≤800不增加个税为0 00输出结果保留两位小数输出a n s ansans时间/空间复杂度时间复杂度O ( 12 ) O ( 1 ) O(12) O(1)O(12)O(1)固定次数的输入和计算空间复杂度O ( 1 ) O(1)O(1)仅使用两个浮点变量分段函数模拟的核心思想阈值判断以800 800800为分界点将连续的数值域划分为两个区间分别对应不同的计算规则线性累加每个月的个税计算相互独立无跨月依赖因此直接遍历累加即可浮点精度控制输入为一位小数输出要求两位小数使用double类型配合格式化输出%.2lf即可满足精度要求适用于规则明确、无状态依赖的简单税务/费用计算问题【算法标签】#入门 #模拟【代码详解】#includebits/stdc.husingnamespacestd;doublex,ans;// x: 每个月的劳务报酬; ans: 累计应预交的个税总和intmain(){for(inti1;i12;i)// 循环处理 12 个月的劳务报酬{cinx;// 读入当前月的劳务报酬if(x800)// 如果劳务报酬超过 800超过部分需要预交个税ans(x-800)*0.2;// 累加超过 800 部分的 20% 税率}printf(%.2lf,ans);// 输出 12 个月预交个税总和保留两位小数return0;}【运行结果】932.0 1634.3 1790.4 2172.9 378.1 283.4 2761.9 3583.5 10.1 2324.9 1111.6 3812.3 2584.76