第 3 章 第 1 题 精简冗余 if 语句问题 使用数组实现
问题分析
输入:用户个人收入
输出:该用户要缴纳的个人所得税
约束:不允许使用过多的 if 语句
解答思路
最简单的方法是根据不同的税率区间,创建多个 if 语句来求解。但如此一来便会有 25 个 if 语句段,代码就显得太过冗余。
可以通过将判定条件都存入数组,编写统一性的代码来达到精简程序的目的。
代码实现
说明:为了描述简单,只列举了 5 个税率区间的情况。
#include <iostream> using namespace std; // 定义税率区间数组元素
struct tax_u {
int income_t;
int base;
double rate;
}; int main(void)
{
// 创建并初始化税率区间数组
struct tax_u * t = new struct tax_u[];
t[].income_t = ;
t[].base = ;
t[].rate = ;
t[].income_t = ;
t[].base = ;
t[].rate = 0.14;
t[].income_t = ;
t[].base = ;
t[].rate = 0.15;
t[].income_t = ;
t[].base = ;
t[].rate = 0.16;
t[].income_t = ;
t[].base = ;
t[].rate = 0.17; // 获取用户收入
double income;
cout << "请输入你的收入:" << endl;
cin >> income; // 判定用户收入所在税率区间
int i;
for (i=; i<; i++) {
if (income <= t[i].income_t)
break;
} // 计算税率
double tax;
if (i==) {
tax = ;
}
else if (i>) {
cout << "超出计算范围" << endl;
return ;
}
else {
tax = t[i].base + (income - t[i-].income_t);
} // 打印结果
cout << "需缴纳个人所得税: " << tax << endl; return ;
}
小结
当检索区间比较大的时候,为了提高效率还可以用二分法检索。
第 3 章 第 1 题 精简冗余 if 语句问题 使用数组实现的更多相关文章
- 《学习OpenCV》练习题第四章第八题ab
这道题是利用OpenCV例子程序里自带的人脸检测程序,做点图像的复制操作以及alpha融合. 说明:人脸检测的程序我参照了网上现有的例子程序,没有用我用的OpenCV版本(2.4.5)的facedet ...
- 《学习OpenCV》练习题第四章第三题b
#include <highgui.h> #include <cv.h> #include "opencv_libs.h" /* *<学习OpenCV ...
- 《学习OpenCV》练习题第四章第三题a
#include <highgui.h> #include <cv.h> #include "opencv_libs.h" #pragma comment ...
- 《学习OpenCV》练习题第四章第七题abc
题外话:一直是打算把这本书的全部课后编程题写完的,中间断了几个月,一直忙于其他事.现在开始补上. 这道题我不清楚我理解的题意是不是正确的,这道题可以练习用OpenCV实现透视变换(可以用于矫正在3维环 ...
- BZOJ_2683_简单题&&BZOJ_1176_[Balkan2007]Mokia_CDQ分治+树状数组
BZOJ_2683_简单题&&BZOJ_1176_[Balkan2007]Mokia_CDQ分治+树状数组 Description 维护一个W*W的矩阵,初始值均为S.每次操作可以增加 ...
- “《编程珠玑》(第2版)第2章”:B题(向量旋转)
B题是这样子的: 将一个n元一维向量向左旋转(即循环移位)i个位置.例如,当n=8且i=3时,向量abcdefgh旋转为defghabc.简单的代码使用一个n元的中间向量在n步内完成该工作.你能否仅使 ...
- “《编程珠玑》(第2版)第2章”:A题(二分搜索)
A题是这样子的: 给定一个最多包含40亿个随机排列的32位整数的顺序文件,找出一个不在文件中的32位整数(在文件中至少缺失一个这样的数据——为什么?).在具有足够内存的情况下,如何解决该问题?如果有几 ...
- 《Cracking the Coding Interview》——第17章:普通题——题目10
2014-04-28 23:54 题目:XML文件的冗余度很大,主要在于尖括号里的字段名.按照书上给定的方式进行压缩. 解法:这题我居然忘做了,只写了一句话的注解.用python能够相对方便地实现,因 ...
- CPrimerPlus第11章第10题
题目: 编写一个程序,读取输入,直到读入了10个字符串或遇到EOF,由二者中最先被满足的那个终止读取过程.这个程序可以为用户提供一个有5个选项的菜单:输出初始字符串列表.按ASCII顺序输出字符串.按 ...
随机推荐
- hdu 2999 sg函数(简单博弈)
Stone Game, Why are you always there? Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 32768/ ...
- uva 11468 AC自动机+概率DP
#include<cstdio> #include<cstring> #include<queue> #include<cstdio> #include ...
- js simple drag.
// by zhangxinxu welcome to visit my personal website http://www.zhangxinxu.com/ // zxx.drag v1.0 20 ...
- windows7下如何生成ssh公钥(git相关)
1. 安装git,从程序目录打开 "Git Bash" 2. 键入命令:ssh-keygen -t rsa -C "email@email.com" &q ...
- 【MFC】半透明对话框(转)
原文转自 http://jingyan.baidu.com/article/656db918fd5b0ee381249ca1.html 在OnInitDialog()函数添加以下代码: //设置半透明 ...
- PHPCMS内链设置,PHPCMS关联链接设置
需求: 在网站中的关键词,自动加上链接. 在PHPCMS中叫做“关联链接”,在DEDECMS中叫做TAG标签. 第1步:后台 -> 扩展 -> 关联链接 -> 添加关联链接: 第2步 ...
- mysql 新增用户并授权
grant all privileges on *.* to 'root'@‘%’ identified by '123456'; *.* 表示所有资源. 刷新权限 flush privileges;
- AC日记——Propagating tree Codeforces 383c
C. Propagating tree time limit per test 2 seconds memory limit per test 256 megabytes input standard ...
- Codeforces Gym101502 I.Move Between Numbers-最短路(Dijkstra优先队列版和数组版)
I. Move Between Numbers time limit per test 2.0 s memory limit per test 256 MB input standard inpu ...
- 洛谷—— P1849 [USACO12MAR]拖拉机Tractor
https://www.luogu.org/problemnew/show/P1849 题目描述 After a long day of work, Farmer John completely fo ...