1. 程式人生 > 資訊 >特斯拉第三代家庭充電樁 21.36.4 韌體更新:可識別車架號,不認識的車不能充

特斯拉第三代家庭充電樁 21.36.4 韌體更新:可識別車架號,不認識的車不能充

一、實驗目的
掌握分治法的設計思想、具體實現和時間複雜度分析。。
二、實驗要求
先用虛擬碼或流程圖描述利用分治法解決的演算法解決方案,再用程式實現,計算時間複雜度,記錄最終測試資料和測試結果,執行時間。
三、演算法虛擬碼或流程圖
(1) 數字旋轉方陣

輸入:當前層左上角要填的數字number,左上角的座標begin,方陣的階數size
輸出:數字旋轉方陣

  1. 如果size等於0,則演算法結束;

  2. 如果size等於1,則d[begin][begin] = number,演算法結束;

  3. 初始化行、列下標:i = j = begin;

  4. 重複下述操作size-1次,填寫區域A
    4.1 d[i][j] = number; number++;
    4.2 i++;

  5. 重複下述操作size-1次,填寫區域B
    5.1 d[i][j] = number; number++;
    5.2 j++;

  6. 重複下述操作size-1次,填寫區域C
    6.1 d[i][j] = number; number++;
    6.2 i--;

  7. 重複下述操作size-1次,填寫區域D
    7.1 d[i][j] = number; number++;
    7.2 j--;

  8. 呼叫函式Full在size-2階方陣中左上角begin+1處從數字number開始填數;
    (2) 最大子段和問題
    (3) 棋盤覆蓋問題
    輸入:棋盤左上角座標(tr,tr);特殊方塊的位置(dr,dr);棋盤大小size;
    輸出:使用L型骨牌覆蓋好的棋盤

  9. 覆蓋左上角子棋盤

  10. 覆蓋右上角子棋盤

(2) (2) (2) (2) (2) (2) (2)

四、程式實現
(1) 數字旋轉方陣

include

using namespace std;

define MAX 100

int d[MAX][MAX];
void Full(int number, int begin, int size);
int main() {
int n;
cout << "請輸入方陣階數n:" << endl;
cin >> n;
Full(1, 0, n);
for (int i = 0; i < n; i++) {
for (int j = 0; j < n; j++) {
if(i<n-1)
cout << d[i][j] << " " ;
else
cout << d[i][j] << " ";
}
cout << endl;
}
}
void Full(int number, int begin, int size) {
int i, j, k;
if (size == 0)
return;
if (size == 1) {
d[begin][begin] = number;
return;
}
i = j = begin;
for (k = 0; k < size - 1; k++) {
d[i][j] = number;
number++;
i++;
}
for (k = 0; k < size - 1; k++) {
d[i][j] = number;
number++;
j++;
}
for (k = 0; k < size - 1; k++) {
d[i][j] = number;
number++;
i--;
}
for (k = 0; k < size - 1; k++) {
d[i][j] = number;
number++;
j--;
}
Full(number, begin + 1, size - 2);
}
(2) 最大子段和問題
(3) 棋盤覆蓋問題
(2) (2) (2) (2) (2) (2) (2)

五、實驗結果展示、時間複雜度分析
(1) 數字旋轉方陣
結果展示:

時間複雜度:O(n^2)
(2) 最大子段和問題
(3) 棋盤覆蓋問題
(2) (2) (2) (2) (2) (2) (2)