1. 程式人生 > >CCF——工資計算(2016-12)

CCF——工資計算(2016-12)

計算方法 評測 cells 大於 格式 工資 小明 body args

問題描述   小明的公司每個月給小明發工資,而小明拿到的工資為交完個人所得稅之後的工資。假設他一個月的稅前工資(扣除五險一金後、未扣稅前的工資)為S元,則他應交的個人所得稅按如下公式計算:
  1) 個人所得稅起征點為3500元,若S不超過3500,則不交稅,3500元以上的部分才計算個人所得稅,令A=S-3500元;
  2) A中不超過1500元的部分,稅率3%;
  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元,請問他的稅前工資S是多少元。 輸入格式   輸入的第一行包含一個整數T,表示小明的稅後所得。所有評測數據保證小明的稅前工資為一個整百的數。 輸出格式   輸出一個整數S,表示小明的稅前工資。 樣例輸入 9255 樣例輸出 10000 評測用例規模與約定   對於所有評測用例,1 ≤ T ≤ 100000。

說明:我這裏用的是很暴力的解法,因為輸入的是稅後工資,稅後工資=稅前工資-繳稅,所以我不斷枚舉稅前工資,利用枚舉稅前工資來計算稅後工資,繳稅的計算方法題目已經給出;又因為稅前工資肯定大於或者等於稅後工資,所以枚舉的初值S為輸入的稅後工資。如果計算的稅後工資和輸入的稅後工資相等,則結果就是這個稅前工資了。註意所有評測數據保證小明的稅前工資為一個整百的數。

import java.util.Scanner;

public class 工資計算 {
    public static void main(String[] args) {
        Scanner sc 
= new Scanner(System.in); double T = sc.nextDouble(); double a1 = 1500 * 0.03; double a2 = a1 + (4500 - 1500) * 0.1; double a3 = a2 + (9000 - 4500) * 0.2; double a4 = a3 + (35000 - 9000) * 0.25; double a5 = a4 + (55000 - 35000) * 0.3; double a6 = a5 + (80000 - 55000) * 0.35; double rate = 0; for (int S = (int) T; S < 1000000; S++) { // 枚舉出所有的稅前工資,稅後工資=稅前工資-稅 if (S <= 3500) { } else if (S - 3500 <= 1500) { rate = (S - 3500) * 0.03; } else if (S - 3500 <= 4500) { rate = a1 + (S - 3500 - 1500) * 0.1; } else if (S - 3500 <= 9000) { rate = a2 + (S - 3500 - 4500) * 0.2; } else if (S - 3500 <= 35000) { rate = a3 + (S - 3500 - 9000) * 0.25; } else if (S - 3500 <= 55000) { rate = a4 + (S - 3500 - 35000) * 0.3; } else if (S - 3500 <= 80000) { rate = a5 + (S - 3500 - 55000) * 0.35; } else { rate = a6 + (S - 3500 - 80000) * 0.45; } if (S - rate == T) { // 如果相等,即得到了稅前工資 System.out.println(S); break; } } sc.close(); } }

CCF——工資計算(2016-12)