计算与软件工程作业三

作业三

作业要求 https://edu.cnblogs.com/campus/jssf/infor_computation17-31/homework/10454
课程目标 学会软件简单语言,完成简单软件功能的开发
此作业在哪个具体方面帮我实现目标 代码运行,寻找bug
作业正文 https://www.cnblogs.com/limin123/p/12455500.html

代码运行结果

代码:

#include<iostream>
#include<cstdlib>
using namespace std;
int getmax(int array[],int length)
{
    int sum = 0;    //记录当前连续子数组的最大和
    int max = 0;   //记录当前数组连续几个元素的和(当其值小于0时,重新对其赋值;【即:抛弃前面的所有元素】)
    int startIndex = 0; //记录子数组(和最大)的起始位置
    int endIndex = 0;   //记录子数组(和最大)的终止位置
    int newStartIndex = 0;  //记录子数组(和最大)的新的起始位置
    for (int i = 0; i < length; i++)    //遍历整个目标数组
    {
        if (max < 0)   //如果max < 0;则要对max重新赋值
        {
            max = array[i];    //对max重新赋值
            newStartIndex = i;  //暂时记录子数组(和最大)的新的起始位置(要看后续的sum 和 max是否发生交换)
        }
        else
        {
            max += array[i];   //如果max >= 0;则要继续将此时的数组元素(array[i])加入到max中
        }
        if (sum < max) //如果此时 sum < max;则表示此时的子数组和大于之前的子数组和
        {
            sum = max; //将大的子数组和max赋值给sum
            startIndex = newStartIndex; //子数组(和最大)的新的起始位置起作用了
            endIndex = i;   //子数组(和最大)的终止位置(只要发生交换就说明endIndex发生变化)
        }
    }
    return max;
}

int getstartIndex(int array[],int length)
{
    int sum = 0;    //记录当前连续子数组的最大和
    int max = 0;   //记录当前数组连续几个元素的和(当其值小于0时,重新对其赋值;【即:抛弃前面的所有元素】)
    int startIndex = 0; //记录子数组(和最大)的起始位置
    int endIndex = 0;   //记录子数组(和最大)的终止位置
    int newStartIndex = 0;  //记录子数组(和最大)的新的起始位置
    for (int i = 0; i < length; i++)    //遍历整个目标数组
    {
        if (max < 0)   //如果temp < 0;则要对temp重新赋值
        {
            max = array[i];    //对max重新赋值
            newStartIndex = i;  //暂时记录子数组(和最大)的新的起始位置(要看后续的sum 和 max是否发生交换)
        }
        else
        {
            max += array[i];   //如果max >= 0;则要继续将此时的数组元素(array[i])加入到max中
        }
        if (sum < max) //如果此时 sum < max;则表示此时的子数组和大于之前的子数组和
        {
            sum = max; //将大的子数组和max赋值给sum
            startIndex = newStartIndex; //子数组(和最大)的新的起始位置起作用了
            endIndex = i;   //子数组(和最大)的终止位置(只要发生交换就说明endIndex发生变化)
        }
    }
    return startIndex;
}
int getendIndex(int array[],int length)
{
    int sum = 0;    //记录当前连续子数组的最大和
    int max = 0;   //记录当前数组连续几个元素的和(当其值小于0时,重新对其赋值;【即:抛弃前面的所有元素】)
    int startIndex = 0; //记录子数组(和最大)的起始位置
    int endIndex = 0;   //记录子数组(和最大)的终止位置
    int newStartIndex = 0;  //记录子数组(和最大)的新的起始位置
    for (int i = 0; i < length; i++)    //遍历整个目标数组
    {
        if (max < 0)   //如果max < 0;则要对max重新赋值
        {
            max = array[i];    //对max重新赋值
            newStartIndex = i;  //暂时记录子数组(和最大)的新的起始位置(要看后续的sum 和 max是否发生交换)
        }
        else
        {
            max += array[i];   //如果max >= 0;则要继续将此时的数组元素(array[i])加入到max中
        }
        if (sum < max) //如果此时 sum < max;则表示此时的子数组和大于之前的子数组和
        {
            sum = max; //将大的子数组和max赋值给sum
            startIndex = newStartIndex; //子数组(和最大)的新的起始位置起作用了
            endIndex = i;   //子数组(和最大)的终止位置(只要发生交换就说明endIndex发生变化)
        }
    }
    return endIndex;
}


int main()
{
    int length,i=0;
    cout<<"请输入个数:";
    cin>>length;
    cout<<"请输入数组:";
    int array[1000]={0};
    for(i=0;i<length;i++)
    {
        cin>>array[i];
    }
        cout<<"最大子数组的和为:"<<getmax(array,length)<<endl;
    cout<<"最大子数组起始下标:"<<getstartIndex(array,length)<<endl;
    cout<<"最大子数组结束下标:"<<getendIndex(array,length)<<endl;
    system("pause");
    return 0;
}

博客作业

从大一到大三,我们也学过很多计算机方面的课程,有MS Office,C++,java,matlab...这些都是简单的软件,我也只是学习了一些简单的操作学习建立文件,操作代码,运行代码,但都只是一些皮毛,希望在未来的大学生活里学习更多的有关于编程之类的知识,提高自己的技能。

码云代码:https://gitee.com/li_min_123/software_engineering/tree/master/

原文地址:https://www.cnblogs.com/limin123/p/12455500.html