軟體工程第三次作業

2022-08-30 20:51:14 字數 1892 閱讀 1861

給定n個整數(可能為負數)組成的序列a[1],a[2],a[3],…,a[n],求該序列如a[i]+a[i+1]+…+a[j]的子段和的最大值。當所給的整數均為負數時定義子段和為0,依此定義,所求的最優值為: max,1<=i<=j<=n

例如,當(a[1],a[2],a[3],a[4],a[5],a[6])=(-2,11,-4,13,-5,-2)時,最大子段和為20。

演算法:

使用動態規劃法,在對於上述分治演算法的分析中我們注意到,若記b[j]=max(a[i]+a[i+1]+..+a[j]),其中1<=i<=j,並且1<=j<=n。則所求的最大子段和為max b[j],1<=j<=n。

由b[j]的定義可易知,當b[j-1]>0時b[j]=b[j-1]+a[j],否則b[j]=a[j]。故b[j]的動態規劃遞迴式為:b[j]=max(b[j-1]+a[j],a[j]),1<=j<=n。

演算法實現的**:類的定義

演算法的實現

演算法的測試

**:

//#include "stdafx.h"

#include #include#include using namespace std;

int main()

b[0] = a[0];

max = b[0];

for (i = 1; i0)

b[i] = b[i - 1] + a[i];

else

b[i] = a[i];

if (b[i]>max)

max = b[i];

} printf("%d\n", max);

return 0;

}在解決方案中新增單元測試

**執行成功後進行樣例測試,選取語句覆蓋的覆蓋標準,通過多組測試樣例覆蓋所有程式語句實現對程式的測試

測試單元的屬性修改

測試資源

#include "stdafx.h"

#include "cppunittest.h"

using namespace microsoft::visualstudio::cppunittestframework;

namespace unittest1

; point t = point(a, count);

assert::areequal(0, t.getmax());

} test_method(testmethod2)

; point t = point(a, count);

assert::areequal(20, t.getmax());

} test_method(testmethod3)

; point t = point(a, count);

assert::areequal(0, t.getmax());

} test_method(testmethod4)

; point t = point(a, count);

assert::areequal(16, t.getmax());

} };

}

測試結果:

**連線最大子陣列和

軟體工程第三次作業

影印機的工作過程大致如下 未接到影印命令時處於 閒置 狀態,一旦接到 影印命令 則進入 影印 狀態,完成乙個影印命令 規定的工作後又回到閒置狀態,等待下乙個影印命令 如果執行影印命令時 發現沒紙 則進入 缺紙 狀態,發出警告,等待裝紙,裝滿紙 後進入閒置狀態,準備接收影印命令 如果影印時發生 卡紙故...

軟體工程第三次作業

最大連續子陣列和 最大子段和 問題 給定n個整數 可能為負數 組成的序列a 1 a 2 a 3 a n 求該序列如a i a i 1 a j 的子段和的最大值。當所給的整數均為負數時定義子段和為0,依此定義,所求的最優值為 max,1 i j n 例如,當 a 1 a 2 a 3 a 4 a 5 a...

軟體工程第三次作業

這個作業屬於哪個課程 這個作業要求在 這個作業的目標 1 對比原型設計工具 2 需求分析 3 原型設計 因為之前對原型設計一點了解都沒有,所以我選擇通過對這三款軟體的第一印象以及後面的深入了解的方式來對比這三款原型設計工具的不同之處 外鏈轉存失敗,源站可能有防盜煉機制,建議將儲存下來直接上傳 img...