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 |
总结:有什么不会的,我应该学会问别人,查资料,不能总是守着电脑发呆了。而且努力把看过的知识记住才行。
时间: 2024-10-20 05:18:40