Page 51, 自立题十八

这道题,反正我感觉挺难的。。。三重循环简单,二重循环就有点麻烦了,一重循环我是想了挺久的才想出来。。。


【题目】

对于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
*********/

【结果】




一重循环有点难想出来,要多来看看复习一下。
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值