• 第 3 章 第 1 题 精简冗余 if 语句问题 使用数组实现


    问题分析

      输入:用户个人收入

      输出:该用户要缴纳的个人所得税

      约束:不允许使用过多的 if 语句

    解答思路

      最简单的方法是根据不同的税率区间,创建多个 if 语句来求解。但如此一来便会有 25 个 if 语句段,代码就显得太过冗余。

      可以通过将判定条件都存入数组,编写统一性的代码来达到精简程序的目的。

    代码实现

      说明:为了描述简单,只列举了 5 个税率区间的情况。

     1 #include <iostream>
     2 
     3 using namespace std;
     4 
     5 // 定义税率区间数组元素
     6 struct tax_u {
     7     int income_t;
     8     int base;
     9     double rate;
    10 };
    11 
    12 int main(void)
    13 {
    14     // 创建并初始化税率区间数组
    15     struct tax_u * t = new struct tax_u[5];
    16     t[0].income_t = 2200;
    17     t[0].base = 0;
    18     t[0].rate = 0;
    19     t[1].income_t = 2700;
    20     t[1].base = 0;
    21     t[1].rate = 0.14;
    22     t[2].income_t = 3200;
    23     t[2].base = 70;
    24     t[2].rate = 0.15;
    25     t[3].income_t = 3700;
    26     t[3].base = 145;
    27     t[3].rate = 0.16;
    28     t[4].income_t = 4200;
    29     t[4].base = 225;
    30     t[4].rate = 0.17;
    31 
    32     // 获取用户收入
    33     double income;
    34     cout << "请输入你的收入:" << endl;
    35     cin >> income;
    36 
    37     // 判定用户收入所在税率区间
    38     int i;
    39     for (i=0; i<5; i++) { 
    40         if (income <= t[i].income_t)
    41             break;
    42     }
    43 
    44     // 计算税率
    45     double tax;
    46     if (i==0) {
    47         tax = 0;
    48     }
    49     else if (i>4) {
    50         cout << "超出计算范围" << endl;
    51         return 1;
    52     }
    53     else {
    54         tax = t[i].base + (income - t[i-1].income_t);
    55     }
    56 
    57     // 打印结果
    58     cout << "需缴纳个人所得税: " << tax << endl;
    59 
    60     return 0;
    61 }

    小结

      当检索区间比较大的时候,为了提高效率还可以用二分法检索

  • 相关阅读:
    Wannafly Winter Camp 2020 Day 7D 方阵的行列式
    [CF1311F] Moving Points
    [CF1311E] Construct the Binary Tree
    [CF1311D] Three Integers
    [CF1311C] Perform the Combo
    [CF1311B] WeirdSort
    [CF1311A] Add Odd or Subtract Even
    Wannafly Winter Camp 2020 Day 7A 序列
    SP7258 SUBLEX
    Wannafly Winter Camp 2020 Day 6J K重排列
  • 原文地址:https://www.cnblogs.com/scut-fm/p/3653830.html
Copyright © 2020-2023  润新知