• 软件工程第三次作业


    题目(1):最大连续子数组和(最大子段和)

    问题: 给定n个整数(可能为负数)组成的序列a[1],a[2],a[3],…,a[n],求该序列如a[i]+a[i+1]+…+a[j]的子段和的最大值。当所给的整数均为负数时定义子段和为0,依此定义,所求的最优值为: Max{0,a[i]+a[i+1]+…+a[j]},1<=i<=j<=n
    例如,当(a[1],a[2],a[3],a[4],a[5],a[6])=(-2,11,-4,13,-5,-2)时,最大子段和为20。
    -- 引用自《百度百科

    [coding地址](https://dev.tencent.com/u/zhoucysw)<-----代码在这里_;


    算法设计以及实现过程:


    • 算法设计描述:在输入数组以及数组个数之后,定义了数组和与最大子段和都为0,循环计算,如果数组和大于最大子段和,就把数组和赋值给最大子段和,反之,最大子段和不变。

    • 流程图:

    • 源代码:

      #include<iostream>
      using namespace std;
      int max(int a[], int n)
      {
      	int maxsum,sum = maxsum = 0;
      	int i;
      	for (i = 0; i < n; i++)
      	{
      		sum += a[i];
      		if (sum > maxsum)
      			maxsum = sum;
      		else if (sum < 0)
      			sum = 0;
      	}
      	return maxsum;
      }
      int main()
      {
      	int i, n;
      	int num[100];
      	cin >> n;
      	for (i = 0; i < n; i++) {
      		cin >> num[i];
      	}
      	int maxsum = max(num, n);
      	cout << maxsum<< endl;
      	system("pause");
      }
      
    • 源代码编译:

    • 测试代码:

      #include "stdafx.h"
      #include "CppUnitTest.h"
      #include"..work31.h"
      
      using namespace Microsoft::VisualStudio::CppUnitTestFramework;
      
      namespace UnitTest3
      {		
      	TEST_CLASS(UnitTest1)
      	{
      	public:
      
      		TEST_METHOD(TestMethod1)
      		{
      			int a[] = { 2,11,4,13,5,-2 };
      			int b = max(a, 6);
      			Assert::AreEqual(33, b);
      			// TODO: 在此输入测试代码
      		}
      	
      	};
      }
      
    • 测试代码编译:

    • 条件判定测试:

      1. 数组为空:当数组为空时,最大子段和应该为0;

      2. 数组全为负数:当数组全为负数时,最大子段和为0;

      3. 数组全为正数:当数组全为正数时,最大子段和为数组和;

      4. sum>maxsum:当数组和大于最大子段和时,最大子段和等于数组和;

      5. sum<maxsum:当数组和小于最大子段和时,最大子段和保持不变;


    • 总结:在这次的个人作业中,是一个完整的代码实现过程,在测试代码的过程中用到了单元测试,经过上一次的练习,这次再使用起来得心应手多了。单元测试是一个软件测试必经之路,虽然这次测试的代码不算很难,测试起来很容易覆盖到,但是这是一个培养思维方式的过程,相信经过不断强化的练习,会慢慢的积累不少的经验。
  • 相关阅读:
    只知道参数名,要从对象里面获取值,可以使用反射机制获取
    mysql创建存储过程,批量建表分表00到99
    讲讲个人对于系统重构的一些心得
    浅谈线程runnable和callable的使用及区别
    springboot项目线程使用2
    springboot项目线程使用
    推荐一个算法网站
    Centos7.3安装和配置jre1.8转
    向java高级工程师和项目经理的道路进发【转】
    linux 查看日志命令
  • 原文地址:https://www.cnblogs.com/zhoucysw/p/10732276.html
Copyright © 2020-2023  润新知