計算與軟件工程作業三


作業三

作業要求 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/


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM