- 1、本文档共3页,可阅读全部内容。
- 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
- 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
实验五 常用算法:枚举法 递推法 迭代法
实验目的
掌握枚举法,递推法、迭代法常用算法。
二、实验内容. 编程求和:s a+aa+aaa+…+aa…a,其中a是1~9中的一个数字。
[提示] 令各项为b0,b1,b2,…bn
则b0 a
b1 b0×10+a
b2 b1×10+a… 即每一项前一项乘以10加a递推得到求和。
. 编程153是一个“水仙花数”,因为153=13+53+33。要求采用枚举法。
3. 范例:设函数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
其代换规律为:首先用两端点函数值的绝对值较大者的对应点作为xi-1,较小者作为xi,即如果|f a | |f b |,则将a赋给xi-1,将b赋给xi。用迭代公式得出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 ,继续迭代。
求解方程:x*lg x 1的实根的近似值,误差不超过0.001。
[提示]令 f x xlgx-1,则f 2 ≈-0.398 0,而f 3 ≈0.431 0,由此可知根在2与3之间。
#include
#include
using namespace std;
const max 30;
double a 2,b 3,ep 0.001;
int main int maxit,j;
double x1,x2,temp,f1,f2,dx; f1 a*log10 a -1; f2 b*log10 b -1;
if f1*f2 0 cout 初值错! endl;
return 0; if fabs f1 fabs f2 x1 a; x2 b; else x1 b; x2 a; temp f1; f1 f2; f2 temp; for j 1;j max;j++ dx x1-x2 *f2/ f2-f1 ;
cout dx;
temp x2;
x2 x2+dx;
x1 temp;
f1 f2;
f2 x2*log10 x2 -1;
cout \t x2 endl; if fabs dx ep || f2 0 cout 方程的根为: x2 endl; return 0; cout 迭代次数过多! endl; return 1; 4. 范例:由0到4五个数字,组成五位数,每个数字用一次,但十位和百位不能为3(当然万位不能为0),输出所有可能的五位数。
#include
using namespace std;
int main int i,j,k,l,m,count 0;
for i 1;i 4;i++ for j 0;j 4;j++ if j i continue; for k 0;k 4;k++ if k 3||k i||k j continue; for l 0;l 4;l++ if l 3||l i||l j||l k continue; for m 0;m 4;m++ if m i||m j||m k||m l continue; cout i j k l m \t; count++; if count%5 0 cout endl; return 0; 穷举法采用循环语句,对须剔除的情况,应在循环体内用条件语句实现,并使用continue语句,不可以使用break语句。如果放在循环条件中,则必然会出错。 n个a
开始
文档评论(0)