hiho一下第74周《Individual Income Tax》题目分析

1
0

题目描述

下表是我国现行的个人所得税计算表格,当实际工资超过3500元之后,超过的部分按照下表缴纳工资:

  • 所得税部分 税率
  • 工资超过0元至1500元 3%
  • 工资超过1500元至4500元 10%
  • 工资超过4500元至9000元 20%
  • 工资超过9000元至35000元 25%
  • 工资超过35000元至55000元 30%
  • 工资超过55000元至80000元 35%
  • 工资超过80000元 45%

现在我们知道小hi这个月缴纳的个人所得税为M元。请你计算出小明这个月的实际工资是多少?

解题思路

本题给定的工资x与个人所得税y的关系满足y = f(x)

f(x)是一个分段函数,但是不难看出f(x)是一个严格递增的函数,因此可以通过y反解出唯一的x

我们首先求出每一个分段最大的累计个人所得税:

x     - y
3500  - 0
5000  - 45
8000  - 345(45 + 3000 * 10%)
12500 - 1245(345 + 4500 * 20%)
38500 - 7745(1245 + 26000 * 25%)
58500 - 13745(7745 + 20000 * 30%)
83500 - 22495(7745 + 25000 * 35%)

由此我们可以根据y的值,来确定x落在那个区间。比如当y = 50时,45 < y ≤ 345,所以x一定在[5000,8000]的区间。

对于5000以内的部分,缴纳了45的税款,那么剩余的5税款也就对应了工资超过1500元至4500元的部分,因此税率为10%,得到这一部分的实际工资为5 / 10% = 50。因此x = 5000 + 50 = 5050

再举一个例子,y=6745

根据y=6745,可以得到x[12500,38500]之间,因此有:x = 12500 + (y - 1245) / 25% = 34500

根据这两个例子,我们可以得到原f(x)函数的反函数f'(y):

f'(y) = 
    3500 + y / 0.03 (y ≤ 45)
    5000 + (y - 45) / 0.1 (45 < y ≤ 345)
    8000 + (y - 345) / 0.2 (345 < y ≤ 1245)
    12500 + (y - 1245) / 0.25 (1245 < y ≤ 7745)
    38500 + (y - 7745) / 0.3 (7745 < y ≤ 13745)
    58500 + (y - 13745) / 0.35 (13745 < y ≤ 22495)
    83500 + (y - 22495) / 0.45 (22495 < y)

得到f'(y)之后,我们只需要让程序实现该函数就可以顺利解决这道题目。

题目总结

比较基础的题目,注意下取整的精度问题即可。

5 answer(s)

0

include

int main() {

double tax; double income; printf("请输入您的个人所得税:\n"); scanf("%lf", &tax);

if (tax <= 45) { income = 3500 + tax / 0.03; } else if (tax <= 345) { income = 5000 + (tax - 45) / 0.1; } else if (tax <= 1245) { income = 8000 + (tax - 345) / 0.2; } else if (tax <= 7745) { income = 12500 + (tax - 1245) / 0.25; } else if (tax <= 13745) { income = 38500 + (tax - 7745) / 0.3; } else if (tax <= 22495) { income = 58500 + (tax - 13745) / 0.35; } else { income = 83500 + (tax - 22495) / 0.45; }

printf("您的工资为:%lf\n", income); system("pause"); return 0; }

0

include

using namespace std; int main() {

double tax; double income; cout<<"请输入您的个人所得税:\n"<>tax; if (tax<=45) { income=3500 + tax / 0.03; }else if (45< tax &&tax <=345) { income=5000 + (tax - 45) / 0.1; }else if (345 < tax &&tax <= 1245) { income=8000 + (tax - 345) / 0.2; }else if (1245 < tax &&tax <= 7745) { income=12500 + (tax - 1245) / 0.25 ; }else if (7745 < tax &&tax <= 13745) { income=38500 + (tax - 7745) / 0.3; }else if (13745 < tax &&tax <= 22495) { income=58500 + (tax - 13745) / 0.35; }else if (22495 < tax) { income=83500 + (tax - 22495); } cout<<"您的工资为:"<

0

#include <stdio.h>

int main() {

double tax;
double income;
printf("请输入您的个人所得税:\n");
scanf("%lf", &tax);

if (tax <= 45) {
    income = 3500 + tax / 0.03;
} else if (tax <= 345) {
    income = 5000 + (tax - 45) / 0.1;
} else if (tax <= 1245) {
    income = 8000 + (tax - 345) / 0.2;
} else if (tax <= 7745) {
    income = 12500 + (tax - 1245) / 0.25;
} else if (tax <= 13745) {
    income = 38500 + (tax - 7745) / 0.3;
} else if (tax <= 22495) {
    income = 58500 + (tax - 13745) / 0.35;
} else {
    income = 83500 + (tax - 22495) / 0.45;
}

printf("您的工资为:%lf\n", income);
system("pause");
return 0;

}

0

include

using namespace std;

int main() { double y=0.0; cin>>y; double x=0.0; if(y<=45) x=3500+y/0.03; else if(y>45 && y<=345) x=5000+ (y-45)/0.1; else if(y>345 && y<=1245) x=8000 + (y-345)/0.2; else if(y>1245 && y<=7745) x=12500+(y-1245)/0.25; else if(y>7745 && y<=13745) x=38500+(y-7745)/0.3; else if(y>13745 && y<=22495) x=58500+(y-13745)/0.35; else if(y>22495) x=83500 + (y-22495)/0.45; cout << x << endl; }

0

include

using namespace std;

int main() { double y=0.0; cin>>y; double x=0.0; if(y<=45) x=3500+y/0.03; else if(y>45 && y<=345) x=5000+ (y-45)/0.1; else if(y>345 && y<=1245) x=8000 + (y-345)/0.2; else if(y>1245 && y<=7745) x=12500+(y-1245)/0.25; else if(y>7745 && y<=13745) x=38500+(y-7745)/0.3; else if(y>13745 && y<=22495) x=58500+(y-13745)/0.35; else if(y>22495) x=83500 + (y-22495)/0.45; cout << x << endl; }

write answer 切换为英文 切换为中文


转发分享