第 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顺序输出字符串.按 ...
随机推荐
- [JSOI2016] 最佳团队 (树形DP+01分数规划)
Description JSOI信息学代表队一共有N名候选人,这些候选人从1到N编号.方便起见,JYY的编号是0号. 每个候选人都由一位编号比他小的候选人Ri推荐.如果Ri=0则说明这个候选人是JYY ...
- jenkins配置本机JDK和maven环境
1.jenkins官网下下载jenkins的war包 2.安装jenkins,启动命令:java -jar jenkins.war 3.打开http://localhost:8080/ 4.点击系统 ...
- 常用快捷键以及linux命令整理
关于快捷键的使用,网上有很多.自己在使用过程中不断整理用到的知识点.一个项目完成了就把涉及用到的快捷键和命令介绍给大家,都是一些比较基础的,常用的命令.希望大家有好的知识点,命令可以及时交流整理. 一 ...
- maven项目中配置mvn源
在pom.xml中配置 <repositories> <!--for others--> <repository> <id>alimaven</i ...
- P2330 05四川 繁忙的都市
题目描述 城市C是一个非常繁忙的大都市,城市中的道路十分的拥挤,于是市长决定对其中的道路进行改造.城市C的道路是这样分布的:城市中有n个交叉路口,有些交叉路口之间有道路相连,两个交叉路口之间最多有一条 ...
- React-Native Navigator-this.props.navigation....
render() { return ( <View> <Text>2</Text> <Button title = "跳转到指定的页面" ...
- es6 --数组--Array.from() 、Array.isArray()、Array.of()、find()、findIndex()、fill()、entries() 、keys() ,values()
将两类对象转为真正的数组 Array.from()方法用于将两类对象转为真正的数组:类似数组的对象(array-like object)和可遍历(iterable)的对象(包括ES6新增的数据结构Se ...
- Spring Cloud系列文,Feign整合Ribbon和Hysrix
在本博客之前的Spring Cloud系列里,我们讲述了Feign的基本用法,这里我们将讲述下Feign整合Ribbon实现负载均衡以及整合Hystrix实现断路保护效果的方式. 1 准备Eureka ...
- Linux下安装python3.3.2及configrue、make、make install
一.安装python3.3.2 raspberry的/usr/local/src目录没有权限,可执行如下命令 pi@raspberrypi:~$ sudo chmod -R 777 /usr/loca ...
- 着陆攻击LAND Attack
着陆攻击LAND Attack 着陆攻击LAND Attack也是一种拒绝服务攻击DOS.LAND是Local Area Network Denial的缩写,意思是局域网拒绝服务攻击,翻译为着陆攻 ...