用c++求二维数组的最大子数组,进行单元测试及代码覆盖率
一、程序分析
1、题目要求
- 从文件中读取内容作为数组数据
- 输出这个数组的最大联通子数组
- 给出单元测试、代码覆盖率等报告
2、代码实现
#include<iostream> #include<fstream> #include<cstdio> #include<ctime> using namespace std; #define M 3 #define N 4 #include <memory.h> int maxSubArray(int* arr, int len) //最大子序列和 { int i, sum = arr[0], b = 0; for (i = 0; i < len; ++i) { if (b > 0) b += arr[i]; else b = arr[i]; if (b > sum) sum = b; } return sum; } int maxSubMatrix(int n, int m, int array[M][N]) { int i, j, h, max, sum = -100000; int b[100]; for (i = 0; i < n; i++) { memset(b, 0, sizeof(b)); //初始化b[] for (j = i; j < n; j++) //把第i行到第j行相加,对每一次相加求出最大值 { for (h = 0; h < m; h++) { b[h] += array[j][h]; //二维数组压缩成一维数组,然后求最大子序列和 } max = maxSubArray(b, h); if (max > sum) sum = max; } } return sum; } int main() { int arr[M][N]; ifstream infile; infile.open("C:\\Users\\小凯克\\Desktop\\tlm3.txt", ios::in); for (int i = 0; i < M; i++) { for (int j = 0; j < N; j++) { infile >> arr[i][j]; } } cout << "最大的子数组和为:"; cout << maxSubMatrix(M, N, arr) << endl; system("pause"); return 0; }
3、运行结果
二维数组:

运行结果:

二、单元测试
使用vs2019进行单元测试
1、测试代码
#include "pch.h" #include "..\Project2\12.cpp" #include "CppUnitTest.h" #include<fstream> using namespace Microsoft::VisualStudio::CppUnitTestFramework; namespace UnitTest2 { TEST_CLASS(UnitTest2) { public: TEST_METHOD(TestMethod1) { ifstream infile1; infile1.open("C:\\Users\\小凯克\\Desktop\\tlm1.txt", ios::in); int test1[3][4] = {}; for (int i = 0; i < M; i++) { for (int j = 0; j < N; j++) { infile1 >> test1[i][j]; } } Assert::AreEqual(15, maxSubMatrix(3, 4, test1)); ifstream infile2; infile2.open("C:\\Users\\小凯克\\Desktop\\tlm2.txt", ios::in); int test2[3][4] = {}; for (int i = 0; i < M; i++) { for (int j = 0; j < N; j++) { infile2 >> test2[i][j]; } } Assert::AreEqual(11, maxSubMatrix(3, 4, test2)); ifstream infile3; infile3.open("C:\\Users\\小凯克\\Desktop\\tlm3.txt", ios::in); int test3[3][4] = {}; for (int i = 0; i < M; i++) { for (int j = 0; j < N; j++) { infile3 >> test3[i][j]; } } Assert::AreEqual(11, maxSubMatrix(3, 4, test3)); } }; }
2、测试结果
三个测试用例:



测试结果:

三、代码覆盖率

四、性能分析
1、cpu和GPU使用率

2、内存使用率


浙公网安备 33010602011771号