解题思路:逆转整个过程,直接构造一个通过工资求对应所缴纳的税函数,主函数直接用一个循环来寻找,由于本体
T=1e+5
,暴力遍历是不会超时的。
#include <iostream>
#include <cstdio>
using namespace std;
// const int T = 100000;
int getTax(int pre_tax) {
int tax = 0;
if (pre_tax <= 3500) {
tax = 0;
} else {
int a = pre_tax - 3500;
if (a < 1500) {
tax = a * 0.03;
} else if (a < 4500) {
tax = 45 + (a - 1500) * 0.1;
} else if (a < 9000) {
tax = 345 + (a - 4500) * 0.2;
} else if (a < 35000) {
tax = 345 + 900 + (a - 9000) * 0.25;
} else if (a < 55000) {
tax = 345 + 900 + 6500 + (a - 35000) * 0.3;
} else if (a < 80000) {
tax = 345 + 900 + 6500 + 6000 + (a - 55000) * 0.35;
} else {
tax = 345 + 900 + 6500 + 6000 + 8750 + (a - 80000) * 0.45;
}
}
return tax;
}
int main() {
int post_tax;
cin >> post_tax;
int pre_tax = 1;
while (pre_tax++) {
// 所有评测数据保证小明的税前工资为一个整百的数:第一次没看到得分90
// 原因:9255-->10000,同时9255-->9999,输出9999
if (post_tax == pre_tax - getTax(pre_tax) && pre_tax % 100 == 0) {
// printf("t=%d, getTax(%d)=%d\n", t, pre_tax, getTax(pre_tax));
cout << pre_tax << endl;
break;
}
}
return 0;
}