这道题,反正我感觉挺难的。。。三重循环简单,二重循环就有点麻烦了,一重循环我是想了挺久的才想出来。。。
【题目】
对于n=2, 5, 8, 11,...,20,23,分别求出E(n)值并输出。要求按三种方式(三重循环,二重循环,一重循环)分别进行编程求解,并对他们各自的运行速度及算法优劣性进行比较。
【提示】
提示我就不打了,自己看书。。。好像我当时为了挑战一下没看提示。。。刚刚看了一下感觉一重循环和书上的想法不一样。
【代码】
/************
* 2013.10.23
* P51 自立题十八
* 练习循环
************/
#include <iostream>
#include <time.h>
#include <windows.h>
using namespace std;
int main()
{
int i, j, k, Down=1, Num=2;
double En = 0;
clock_t start, time1, time2,time3;
//===========三重循环==========
cout<<"--------------------"<<endl;
start = clock();
for(i=2;i<=23;i+=3)
{
for(j=1;j<=i;j++)
{
for(k=1;k<=j;k++)
{
Down *= k;
}
En += (1.0 / Down);
Down = 1;
}
cout<<En<<endl;
En = 0;
}
time1 = clock();
cout<<"--------------------"<<endl;
cout<<"三重循环执行时间"<<time1 - start<<"毫秒"<<endl;
time1 = clock();
cout<<"--------------------"<<endl;
//===========两重循环==========
for(i=2;i<=23;i+=3)
{
for(j=1;j<=i;j++)
{
Down *= j;
En += 1.0 / Down;
}
cout<<En<<endl;
En = 0;
Down = 1;
}
time2 = clock();
cout<<"--------------------"<<endl;
cout<<"两重循环执行时间"<<time2 - time1<<"毫秒"<<endl;
cout<<"--------------------"<<endl;
time2 = clock();
//===========一重循环==========
for(i=2;i<=23;i+=3)
{
if(i == 2)
{
En += (1.0 / 1 + 1.0 / 2);
}else{
Num *= (i - 2);
En += (1.0 / Num);
Num *= (i - 1);
En += (1.0 / Num);
Num *= i;
En += (1.0 / Num);
}
cout<<En<<endl;
}
time3 = clock();
cout<<"--------------------"<<endl;
cout<<"一重循环执行时间"<<time3 - time2<<"毫秒"<<endl;
cout<<"--------------------"<<endl;
system("pause");
return 0;
}
/*********
* 7sDream
* 21:38
*********/
【结果】
一重循环有点难想出来,要多来看看复习一下。