实验五 常用算法-----枚举法、递推法、迭代法实验六 文本文件的简单应用

  • 格式:doc
  • 大小:117.00 KB
  • 文档页数:16

下载文档原格式

  / 29
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

实验五常用算法-----枚举法、递推法、迭代法一.实验目的

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

二.实验内容

1、范例:由0到4五个数字,组成5位数,每个数字用一次,但十位和百位不能为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<

count++;

if(count%5==0)cout<

return 0;

}

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

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

#include

using namespace std;

int main(){

double s;

int i,j,n,a,b;

i=1,b=0,s=0;

cout<<"input a,n,0

cin>>a>>n;

for(i=1;i<=n;i++){

b=b*10+a;

s=s+b;

}

cout<

return 0;

}

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

因为153=13+53+33。要求采用枚举法。

#include

using namespace std;

int main(){

int a,b,c,i,count=0;

for(i=100;i<=999;i++){

a=i/100;

b=i-a*100;

b=b/10;

c=i-a*100-b*10;

if(i==a*a*a+b*b*b+c*c*c){

cout<

count++;

if(count%5==0)cout<

return 0;

}

5、设函数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之间

#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<<"wrong"<

return 0;

}

if(fabs(f1)

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<

temp=x2;

x2=x2+dx;

x1=temp;

f1=f2;

f2=x2*log10(x2)-1;

cout<<'/t'<

if((fabs(dx)

cout<<"方程的根为:"<

return 0;

}

}

cout<<"迭代次数过多"<

return 1;

}

实验六文本文件的简单应用