標籤

BAT (38) shell (34) Virtual Machine (33) Xubuntu (29) acfs (25) PHP (24) CentOS (21) Virtul Box (20) 編輯器 (17) 資料庫 (15) lubuntu (13) windows (13) CPP (12) ubuntu (12) chrome (11) laravel (10) Docker (9) Python (9) 5A88 (7) VMware (6) 資料結構 (6) Javascript (5) Node (5) Proxmox VE (5) 公告系統 (5) 程式積木 (5) Android Studio (4) ANN (3) OB2D2016x64 (3) Xoops (3) clonezilla (3) samba (3) 公文 (3) 其他 (3) 硬體 (3) API (2) Android (2) AppInvent2 (2) Html (2) Hyper-V (2) Nas (2) botnet (2) mbot (2) swift (2) wordpress (2) 樣板 (2) 防火牆 (2) AD的應用 (1) Ansible (1) Arduino (1) CSS (1) GitLab (1) HA Proxy (1) LegoEV3 (1) PowerShell (1) Scratch (1) VM (1) XenServer (1) kotlin (1) linuxmint (1) lxc (1)

2020年6月7日 星期日

C++程式_用指標改寫轉置4x4的陣列演算法

        最近利用C++ 程式讀取config.txt後,將部分工作快速完成。開始又去回顧C++語言、資料結構與演算法。往年讀資料結構與演算法,只是應付考試。而演算法又需要大量數學驗證,不覺得能解決問題。因此,重新讀[演算法之美:隱藏在資料結構背後的原理(C++版)],並將心得與相關筆記記錄下來。希望能對資料結構與演算法有新的認識。
Chap2:指標與陣列--也談中國古代兵制
1.請用指標改寫轉置4x4的陣列
陣列寫法:
#include <iostream>
using namespace std;
int main() {
int a[4][4] = {{0,1,2,3},{4,5,6,7},{8,9,10,11},{12,13,14,15}};
int i = 0;
int j = 0;
int tmp = 0;
for(i=0;i<4;i++) {
for(j=0;j<4;j++) {
cout<<a[i][j]<<" ";
}
cout<<endl;
}
cout<<endl;

for(i=0;i<4;i++) {
for(j=i+1;j<4;j++) {
tmp = a[i][j];
a[i][j] = a[j][i];
a[j][i] = tmp;
}
}

 for(i=0;i<4;i++) {
for(j=0;j<4;j++) {
cout<<a[i][j]<<" ";
}
cout<<endl;
}
}
觀念:
1.指標
        int a[4][4] = {0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15};
int *p;
p = &a[0][0];
        或者
        int *p = a;
範例程式碼
#include <iostream>
using namespace std;
int main() {
        int a[4][4] = {0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15};
int *p;
p = &a[0][0];
        int i,j;
        for(i=0;i<4;i++) {
             for(i=0;i<4;i++) {
                 cout <<*(p+4*i+j)<<" ";
             }
             cout <<endl;
         }
}
改寫:
#include <iostream>
using namespace std;
int main() {
int a[4][4] = {0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15};
int *p;
int temp;
p = &a[0][0];
//呈現原始陣列
for(int i=0;i<4;i++) {
for(int j=0;j<4;j++) {
       cout <<*(p+4*i+j)<<" ";
}
cout <<endl;
}
//轉置
for(int i=0;i<4;i++) {
for(int j=i+1;j<4;j++) {
   temp = *(p+4*i+j);
   *(p+4*i+j)= *(p+4*j+i);
   *(p+4*j+i) = temp;
}
}
//呈現轉置後陣列
for(int i=0;i<4;i++) {
for(int j=0;j<4;j++) {
       cout <<*(p+4*i+j)<<" ";
}
cout <<endl;
}
return 0;
}
   
資料來源:
1.書籍:演算法之美:隱藏在資料結構背後的原理(C++版)
2.C++ Template 筆記

沒有留言:

張貼留言

在 Windows 10 x64 1909版,使用BAT快速安裝公文系統與人事服務網(自然人憑證)版

相關內容移往 https://skjhcreator.blogspot.com/2021/02/windows-10-x64-1909bat.html