zoukankan      html  css  js  c++  java
  • 软工程第三次作业

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

    问题: 给定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。
    -- 引用自《百度百科》

      解题思路:本着计算机就是能够重复做简单的事的思想,在不考虑算法复杂度的前提下最简单的方法莫过于暴力模拟各种情况了,通过两层循环将原数组各个子数组和求出来,同时进行比较筛选想要的数组,既为最大子数组和

    代码1(C++)

    #include<iostream>
    using namespace std;
    int main()
    {
        int iNum;
        int iSummary = 0;
        int iTemp = 0;
        cin >> iNum;
        int *a = new int[iNum];
    
        for(int i = 0; i < iNum; i++)
            {
                cin >> a[i];
            }
    
        for(int i = 0; i < iNum; i++)
        {
            for(int j = i; j < iNum; j++)
            {
                iSummary = 0;
                for(int k = i; k <= j; k++)
                {
                    iSummary += a[k];
                }
                if(iSummary > iTemp )
                {
                    iTemp = iSummary;
                }
            }
        }
        cout << iTemp;
        return 0;
    
    }
    

    codingnet地址:https://coding.net/u/fashow/p/software_engineering/git/blob/master/summary.cpp?public=true

    代码2(JAVA)

    import  java.util.Scanner;
    
    public class Sequence{
    	public static void main(String[] args) {
    //		Scanner iNum = new Scanner(System.in);
    //			    int size = inum.nextint();
    //			    int[] seq = new int[size];
    //			    for(int i = 0; i < size; i++) {
    //			    	seq[i] = inum.nextint();
    //			    }
    //			    inum.close();
    		int Seq[]  = {1,-2,-3,-4,5,6};
    		int test;
    		test = MaxSeq(Seq , 6);
    		System.out.println(test);
    			}
    	
    	
    	public static int MaxSeq(int [] Seq,int size){
    	    int iSummary = 0;
    	    int iTemp = 0;
    	    for(int i = 0; i < size; i++) {
    	    	for(int j = i; j < size; j++) {
    	    		iSummary = 0;
    	    		for(int k = i; k <= j; k++) {
    	    			iSummary += Seq[k];
    	    			if(iSummary > iTemp) {
    	    				iTemp = iSummary;
    	    			}
    	    		}
    	    	}
    	    }	    
    	return iTemp;
    	}
    }
    

    codingnet地址:https://coding.net/u/fashow/p/software_engineering/git/blob/master/Sequence.java?public=true

    程序运行结果

    (代码2)测试代码(条件覆盖)

    import static org.junit.jupiter.api.Assertions.*;
    
    import org.junit.jupiter.api.Test;
    
    class SequenceTest {
    
    	@Test
    	void testMaxSeq() {
    		int Seq[] = {1,2,-3,4,5,-6,7,-8};
    		assertEquals( 10 ,new Sequence().MaxSeq(Seq,8));
    	}
    
    }
    

    测试结果如图


    代码地址:https://coding.net/u/fashow/p/software_engineering/git/blob/master/SequenceTest.java?public=true

      题目不难但是忙活一下午,领悟到一个道理,懂得了什么叫纸上谈兵,好几天不碰的东西真的出乎意料的生疏。这以后会是我的饭碗,认真对待下去不仅仅是对理论的巩固,更是个人能力的加强,真的是只要有接触到就是在不停的学习,一个大写加粗的加油

  • 相关阅读:
    mysql排行榜sql的实现
    MYSQL 简单的循环存储过程
    Git学习笔记
    LeetCode-树-简单-108-110-111
    Android开发连接mysql云数据库中遇到的的一些问题
    使用mybatis遇到报错Invalid bound statement (not found)
    ajax使用时碰到的一些坑
    关于Echarts的常见报错
    deepin系统桌面图标和菜单栏突然消失
    SOA架构理解
  • 原文地址:https://www.cnblogs.com/fashow/p/8687114.html
Copyright © 2011-2022 走看看