#include <iostream>
using namespace std;
int cal(int s)
{
int b;
int a=s-3500;
if(a<=1500)
{
b=s-0.03*a;
}
else if(1500<a&&a<=4500)
{
b=s-0.03*1500-(a-1500)*0.1;
}
else if(4500<a&&a<=9000)
{
b=s-0.03*1500-(4500-1500)*0.1-(a-4500)*0.2;
}
else if(9000<a&&a<=35000)
{
b=s-0.03*1500-(4500-1500)*0.1-(9000-4500)*0.2-(a-9000)*0.25;
}
else if(35000<a&&a<=55000)
{
b=s-0.03*1500-(4500-1500)*0.1-(9000-4500)*0.2-(35000-9000)*0.25-(a-35000)*0.3;
}
else if(55000<a&&a<=80000)
{
b=s-0.03*1500-(4500-1500)*0.1-(9000-4500)*0.2-(35000-9000)*0.25-(55000-35000)*0.3-(a-55000)*0.35;
}
else if(a>80000)
{
b=s-0.03*1500-(4500-1500)*0.1-(9000-4500)*0.2-(35000-9000)*0.25-(55000-35000)*0.3-(80000-55000)*0.35-(a-80000)*0.45;
}
return b;
}
int main()
{
int t;
cin >> t;
//cout << cal(10000) << " 666" << endl;
if(t<=3500) cout << t << endl;
else
{
for(int i=3600;i<=100000;i+=100)
{
if(cal(i)==t)
{
cout << i << endl;
break;
}
}
}
return 0;
}
注意:!!!
if(55000<a&&a<=80000)
不要写成
if(55000<a<=80000)
这道题还要注意逆向思维,因为题干已经限定原始工资为整百的数字。
二刷:
要注意税率数组是float类型,里面的数千万别抄错喽。
注意差值小于1500和大于80000的情况,要额外处理。
#include <iostream>
using namespace std;
int main()
{
int s,t,sum=0,c=0,d;
int a[7]={0,1500,4500,9000,35000,55000,80000};
float tax[7]={0.03,0.1,0.2,0.25,0.3,0.35,0.45};
cin >> t;
if(t<=3500)
{
s=t;
cout << s << endl;
return 0;
}
for(int i=3600;i<100000;i+=100)
{
int cha=i-3500;
if(cha>80000)
{
sum+=(cha-80000)*tax[6];
cha=80000;
}
int j=0;
for(j=0;j<6;j++)
{
if(a[j]<=cha&&cha<=a[j+1])
{
c=cha-a[j];
break;
}
}
if(j>0)
{
for(int k=0;k<j;k++)
{
sum+=(a[k+1]-a[k])*tax[k];
}
}
sum+=c*tax[j];
if(i-sum==t){
s=i;
break;
}
sum=0;
}
cout << s << endl;
return 0;
}