CCF201612-2 工資計算
阿新 • • 發佈:2018-11-20
問題描述
試題編號: | 201612-2 |
試題名稱: | 工資計算 |
時間限制: | 1.0s |
記憶體限制: | 256.0MB |
問題描述: | 問題描述 小明的公司每個月給小明發工資,而小明拿到的工資為交完個人所得稅之後的工資。假設他一個月的稅前工資(扣除五險一金後、未扣稅前的工資)為S元,則他應交的個人所得稅按如下公式計算: 3) A中超過1500元未超過4500元的部分,稅率10%; 4) A中超過4500元未超過9000元的部分,稅率20%; 5) A中超過9000元未超過35000元的部分,稅率25%; 6) A中超過35000元未超過55000元的部分,稅率30%; 7) A中超過55000元未超過80000元的部分,稅率35%; 8) A中超過80000元的部分,稅率45%; 例如,如果小明的稅前工資為10000元,則A=10000-3500=6500元,其中不超過1500元部分應繳稅1500×3%=45元,超過1500元不超過4500元部分應繳稅(4500-1500)×10%=300元,超過4500元部分應繳稅(6500-4500)×20%=400元。總共繳稅745元,稅後所得為9255元。 已知小明這個月稅後所得為T 輸入格式 輸入的第一行包含一個整數T,表示小明的稅後所得。所有評測資料保證小明的稅前工資為一個整百的數。 輸出格式 輸出一個整數S,表示小明的稅前工資。 樣例輸入 9255 樣例輸出 10000 評測用例規模與約定 對於所有評測用例,1 ≤ T ≤ 100000。 |
本題可以將幾個臨界值求出來,通過查表,找出稅前工資應該在哪個範圍內。程式碼如下,詳見註釋:
#include<iostream> #include<vector> #include<algorithm> using namespace std; //稅率改變的幾個臨界值 int salary[]={3500,1500+3500,4500+3500,9000+3500,35000+3500,55000+3500,80000+3500}; //稅率表 int tax[]={3,10,20,25,30,35,45}; const int size=sizeof(salary)/sizeof(int); //range陣列用來儲存salary表中的各個值扣完稅之後的值 int range[size]; int main() { int t,i,res; cin>>t; range[0]=salary[0]; //計算出range陣列,按公式求即可 for(int i=1;i<size;i++) range[i]=range[i-1]+(salary[i]-salary[i-1])-(salary[i]-salary[i-1])*tax[i-1]/100; //找出所給的稅後工資在哪個範圍內 for(i=0;i<size;i++) if(t<=range[i]) break; //通過找到區間來確定稅率,從而求出結果 if(i==0) res=t; else res=salary[i-1]+(t-range[i-1])*100/(100-tax[i-1]); cout<<res; return 0; }