实验五 常用算法-----枚举法、递推法、迭代法

一.实验目的

掌握枚举法、递推法、迭代法这3个常用的算法

二.实验内容

1、范例:由0到4五个数字,组成5位数,每个数字用一次,但十位和百位不能为3(当然万位不能为0),输出所有可能的五位数。
【程序】

【思考】 穷举法采用循环语句,对必须剔除的情况应在循环体内用条件语句实现,并使用continue语句,不可以使用break语句;

如果将其放在循环条件中,则必然会出错。

2、编程求和:s=a+aa+aaa+aaaa+ ……+aaaa…aaa(n个),其中a为1~9中的一个数字。


【提示】若第一项为a , 以后每一项由前一项乘以10加上a递推得到,然后求和。

3、编程求出所有的“水仙花数”。所谓“水仙花数”是指一个3位数,其中各位数字的立方和等于该数本身,例如153就是一个“水仙花数”,

因为153=1^3+5^3+3^3。要求采用枚举法。

4、有两队选手每队5人进行一对一的比赛,甲队为A、B、C、D、E,乙队为J、K、L、M、N,经过抽签决定比赛对手名单。规定A不和J比赛,

M不和D及E比赛。列出所有可能的比赛名单。
【提示:】先固定甲队,A在0号位,B在1号位,依次排列,最后E在4号位;然后乙队排对应的对手,用循环变量j、k、l、m、n分别对应0号位的选择、1号位的选择、依次类推,

直到到4号位的选择,每一层循环应剔除上一轮已选过的选手,和指定不与比赛的对手。用变量i统计不同情况数。

5、给定一个大于2的正整数,求出小于该数的所有素数。

【提示】 利用递推法来求解,用vector来存储已经求出的素数(初始化为有一个数据元素,值为2),下一个素数条件为不能被小于该数的所有素数整除

★ (选做题)6、设函数f(x)定义在区间[a,b]上,f(x)连续且满足f(a)*F(b)<0,求f(x)在[a,b]上的根。

采用弦位法,迭代公式为: xi+1= xi+( xi-1- xi)/(f(xi)-f(xi-1))*f(xi)

其代换规律为:首先用两端点函数值的绝对值较大者的对应点作为x[i-1],较小者作为x[i],即如果
|f(a)|<|f(b)|,则xi←a,xi-1←b。用迭代公式得出xi+1,f(xi+1)。

误差定义为: ⊿x =( xi-1-xi/(f(xi)-f(xi-1))*f(xi)
当⊿x <ε或f(xi+1)==0则结束运算。否则用(xi,f(xi))代替(xi-1,f(xi-1)),用(xi+1,f(xi+1))
代替(xi ,f(xi)),继续迭代。
求方程 xlg(x)=1 的实根的近似值,要求误差不超过0.001。
【提示】 令 f(x)=xlgx-1 ,则f(2)≈-0.398<0,而 f(3) ≈0.431>0 ,由此可知f(x)的根在2与3之间。