#include<bits/stdc++.h>
using namespace std;
typedef long long ll;
unordered_map<int,int>mp;
int m[10];
void init(int x){
if(x<=3500){
mp[x]=x;
return ;
}
int high=x-3500;
int ans;
if(high<=1500){
ans=x-high*3/100;
}else if (high>1500&&high<=4500){
ans=x-m[0]-(high-1500)*10/100;
}
else if(high>4500&high<=9000){
ans=x-m[0]-m[1]-(high-4500)*20/100;
}
else if(high>9000&&high<=35000){
ans=x-m[0]-m[1]-m[2]-(high-9000)*25/100;
}
else if(high>35000&&high<=55000){
ans=x-m[0]-m[1]-m[2]-m[3]-(high-35000)*30/100;
}
else if(high>55000&&high<80000){
ans=x-m[0]-m[1]-m[2]-m[3]-m[4]-(high-55000)*35/100;
}
else {
ans=x-m[0]-m[1]-m[2]-m[3]-m[4]-m[5]-(high-80000)*45/100;
}
mp[ans]=x;
return;
}
int main(){
int T;
cin>>T;
m[0]=15*3;
m[1]=(45-15)*10;
m[2]=(90-45)*20;
m[3]=(350-90)*25;
m[4]=(550-350)*30;
m[5]=(800-550)*35;
for(int i=100;i<=100000;i+=100){
init(i);
}
cout<<mp[T]<<endl;
return 0;
}
简单易懂的方法
#include<bits/stdc++.h>
using namespace std;
double a[8]={0,3500,3500+1500,3500+1500+3000,3500+1500+3000+4500,
3500+1500+3000+4500+26000,3500+1500+3000+4500+26000+20000,
3500+1500+3000+4500+26000+20000+25000};//税前值
double b[8];//税后值
double rax[8]={0,0,0.03,0.1,0.2,0.25,0.3,0.35};//税率
int main()
{
int t,rank;
double val,s;
cin>>t;
memset(b,0,sizeof(b));
for(int i=1;i<=7;i++)
{
b[i]+=b[i-1];
b[i]+=((a[i]-a[i-1])-((a[i]-a[i-1])*rax[i]));
}
if(t>b[7])
{
val=(t*1.0-b[7])/(1-0.45);
s=a[7]+val;
}
else
{
for(int i=1;i<=7;i++)
{
if(t<=b[i])
{
rank=i;
break;
}
}
//cout<<"rank="<<rank<<endl;
val=(t*1.0-b[rank-1])/(1-rax[rank]);
s=a[rank-1]+val;
}
int k=(int)s;
cout<<k<<endl;
return 0;
}