• 最大子数组-工作效率


     1 #include<iostream>
     2 #include<ctime>
     3 #define N 2000          //宏定义          
     4 using namespace std;
     5 void main()
     6 
     7 {
     8     int a[N];              //整数数组
     9     int f;                 //数值范围
    10     int i, j, k;             //控制循环变量
    11     int sum, max;      //和与最大值
    12     int m, n;               //记录子数组
    13     clock_t start, end;    //记录开始和结束的时间
    14     cout << "请输入数值范围:";
    15     cin >> f;
    16     start = clock();          // 把现在系统的时间调用赋值给start
    17     srand((unsigned)time(NULL));         /*初始化随机数种子用的 
    18                                          没有这句代码 
    19                                          产生的随机数应该是相同的加上这句代码  
    20                                          产生的随机数是随机的*/
    21     for (i = 0; i<N; i++)             //控制循环,
    22     {
    23         a[i] = (rand() % 2 ? -1 : 1)*rand() % f;         //产生随机数
    24         cout << a[i] << "   ";       //输出一维数组
    25     }
    26     cout << endl;
    27     max = a[0];          //先把数组中的第一个数作为最大值
    28     //以下是进行比较出最大值
    29     for (i = 0; i<N; i++)
    30     {
    31         for (j = 0; j <= i; j++)
    32         {
    33             sum = 0;       //初始化字数组的和
    34             for (k = j; k <= i; k++)   //循环变量
    35                 sum = sum + a[k];    
    36             if (sum>max)
    37             {
    38                 max = sum;        //更新最大值:从第一子数组的和加下一个数成为新的子数组的和,比较最大值
    39                 m = j;        
    40                 n = i;     //记录不了循环里的i,j。
    41             }
    42         }
    43     }
    44     end = clock();        //结束的时间
    45     cout << "运行时间为:" << double((end - start)) / 1000 << "" << endl;  //运行时间
    46     cout << "子数组和的最大值为:" << max << endl;
    47     cout << "子数组是第" << m + 1 << "个数,到第" << n + 1 << "个数。" << endl;
    48     cout << "子数组是:";
    49     for (i = m; i <= n; i++)
    50     {
    51         cout << a[i] << "  ";      
    52     }
    53     cout << endl;
    54 }

    实验截图:

    数组大小:5000

    运行时间:57.202s


    设计思路:先宏定义数组的运算量后,输入数组的取值范围,从定义的第一个子数组开始比较子数组的和找出最大值,并记录开始和结束的时间。

    实现时间流程:星期三(4月8日)

         
    事件 时间段 时间
    设计思路 3:00-4:30 1h30m
    网上找例子 4:30-5:00 30m
    解释语句 6:00-8:00 2h
    总结 8:00-8:30

    30m

    总结:有什么不会的,我应该学会问别人,查资料,不能总是守着电脑发呆了。而且努力把看过的知识记住才行。

  • 相关阅读:
    [自定义服务器控件] 第三步:CheckBoxList。
    Flex构建WebService应用
    ServletActionContext.getRequest().getServletPath()错误的解决方法
    MyEclipse 8.6 安装 SVN 插件
    [转]hibernateHQL总结
    Struts入门实例
    错误:“Cannot load JDBC driver class 'com.mysql.jdbc.Driver”的解决方法
    Target runtime Apache Tomcat v6.0 is not defined.错误解决方法
    错误:“已有打开的与此命令相关联的 DataReader,必须首先将它关闭”的解决方法。
    [转]删除Windows 7 C:/Users/用户名/AppData里面的文件
  • 原文地址:https://www.cnblogs.com/helloalbert/p/4412162.html
Copyright © 2020-2023  润新知