一,内容
通过使用恰当的数据结构来替代复杂的代码。
二,习题
1、题目描述:本书出版之时,美国的个人收入所得税分为5种不同的税率,其中最大的税率大约为40%.以前的情况则更为复杂,税率也更高。下面所示的程序文本采用25个if语句的合理方法来计算1978年的美国联邦所得税。税率序列为0.14, 0.15, 0.16, 0.17, 0.18.....。序列中此后的计算大于0.01.有何建议呢?
if income <= 2200
tax = 0;
else if income <= 2700
tax = 0.14 * (income - 2200);
else if income <= 3200
tax = 70 + 0.15 * (income - 2700);
else if income <= 3700
tax = 145 + 0.16 * (income -3200);
else if income <= 4200
tax =225 + 0.17 * (income - 3700);
.......
else
tax =53090 + 0.70 * (income - 102200);
采用二分搜索定位到采用哪个分段函数,然后对应求出结果。
源码:
2、
#include <iostream> using namespace std; int main() { int t=0; int i,k; int n=10; int c[10]={1,2,3,4,5,6,7,8,9,10}; int a[10]={0}; for(k=1;k<n;++k) { for(i=1;i<k;++i) a[k] = a[k-i] * c [i]; a[k] +=c[k+1]; } for(i=0;i<n;++i) cout<<a[i]<<endl; return 0; }
3、当要输入的数据很多,且没有规律时,可以考虑编写一个格式信函发生器(form letter generator)用于解析格式信函模板(form letter schema)。将数据从控制层分离的好处在于:避免每次针对不同的数据编写不同的代码;当需要改变一些公用文本的输出方式时,直接编辑模板即可,并不需要对数据进行修改。
x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x
x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x
4、日期处理
这里把所有相关的处理函数放出来。
第5题,解法是hash表中带hash。第一个以ic, tic 等做hash
首先根据后缀找到hash_set,再把余下的字段,依次在hash_set中查找,并取出最长的。
6、这个可以用python来写,下面先看一下示例代码。
模板文件/tmp/win03.domain.template
代码
如果采用C++实现,并且${}里面的代单词表明是要被替换的单词。那么处理方法如下:
7、略去,比较扯
8、2^16 = 65536个数。所以5个七段显示器肯定是够用的。
因为最大的数 65535 有五位数。
#include <iostream> #include <memory> using namespace std; void showNumber(int i) { int j=i; switch(j) { case 0:printf(" --\n");break; case 1:printf("|");break; case 2:printf(" |\n");break; case 3:printf(" --\n");break; case 4:printf("|");break; case 5:printf(" |\n");break; case 6:printf(" --\n");break; default :break; }; } void showNullNumber(int i) { switch(i) { case 0:printf("\n");break; case 1:printf(" ");break; case 2:printf(" \n");break; case 3:printf("");break; case 4:printf(" ");break; case 5:printf(" \n");break; case 6:printf("\n");break; default :break; }; } void GraphFigure(int i) { int show[7]; int show0[]={1,1,1,0,1,1,1}; int show1[]={0,1,0,0,1,0,0}; int show2[]={1,0,1,1,1,0,1}; int show3[]={1,0,1,1,0,1,1}; int show4[]={0,1,1,1,0,1,0}; int show5[]={1,1,0,1,0,1,1}; int show6[]={1,1,0,1,1,1,1}; int show7[]={1,0,1,0,0,1,0}; int show8[]={1,1,1,1,1,1,1}; int show9[]={1,1,1,1,1,0,1}; switch(i) { case 0:memcpy(show,show0,sizeof(show));break; case 1:memcpy(show,show1,sizeof(show));break; case 2:memcpy(show,show2,sizeof(show));break; case 3:memcpy(show,show3,sizeof(show));break; case 4:memcpy(show,show4,sizeof(show));break; case 5:memcpy(show,show5,sizeof(show));break; case 6:memcpy(show,show6,sizeof(show));break; case 7:memcpy(show,show7,sizeof(show));break; case 8:memcpy(show,show8,sizeof(show));break; case 9:memcpy(show,show9,sizeof(show));break; default :break; }; for(int i=0;i<7;++i) { if(1 == show[i]) showNumber(i); else showNullNumber(i); } } int main() { for(int i=0;i<10;++i) { GraphFigure(i); cout<<"\n\n"; } return 0; }