標籤

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月22日 星期一

C++程式_Z字形編排問題

目標
要變成
觀念:
1、如果矩陣的元素matrix[i][j]中縱坐標j是偶數,並且i==0或i==SIZE-1,那麼遍歷路徑在矩陣中的走向就是向右移動一格
條件寫成程式碼:
if (j%2==0&&(i==0||i==SIZE-1)) {
       j++;
       continue;
}
2、如果矩陣的元素matrix[i][j]中橫坐標i是奇數,並且j==0或j==SIZE-1,那麼遍歷路徑在矩陣中的走向就是向下移動一格
條件寫成程式碼:
if (i%2==1&&(j==0||j==SIZE-1)) {
       i++;
       continue;


3、除以上規律情況之外,如果矩陣的元素matrix[i][j]的橫縱坐標之和i+j為偶數,那麼遍歷路徑在矩陣中的走向就是向右上角移動一格;否則,如果i+j是奇數,那麼遍歷路徑在矩陣中的走向就是向左下角移動一格。
條件寫成程式碼:
if ((i+j)%2==0) {
  j++;
  i--;
} else if ((i+j)%2==1) {
  j--;
  i++;
}

測試程式碼:
#include <iostream>
#include <iomanip>
using namespace std;
int main() {
int i,j,x,y,SIZE;
i=0,j=0,SIZE=8;
for(x=0;x<SIZE;x++) {
for(y=0;y<SIZE;y++) {
cout <<"i= "<<i<<" j= "<<j<<" x= "<<x<<" y= "<<y<<endl;
if ((i==0||i==SIZE-1)&&j%2==0) {
j++;
continue;
}
if ((j==0||j==SIZE-1)&&i%2==1) {
i++;
continue;
}
if ((i+j)%2 ==0) {
i--;
j++;
} else if((i+j)%2 ==1){
i++;
j--;
}
}
}
}

今將測試程式碼改寫成"二維陣列"如下:

#include <iostream>
#include <iomanip>
using namespace std;
int main() {
 int i,j,x,y,SIZE;
 i=0,j=0,SIZE=8;
 int a[SIZE][SIZE] = {0};
 int b[SIZE][SIZE] = {0};
 cout <<endl<<"變更前的矩陣"<<endl;
 for(i=0;i<SIZE;i++) {
  for(j=0;j<SIZE;j++) {
  if(a[i][j]!=0) {
  a[i][j]=0;
}
if(b[i][j]!=0) {
  b[i][j]=0;
}
a[i][j] = i*SIZE+j;
  cout <<setw(4)<<a[i][j]<<" ";
  }
  cout <<endl;
 }
 i=0;j=0;
 for(x=0;x<SIZE;x++) {
  for(y=0;y<SIZE;y++) {
   //cout <<"i= "<<i<<" j= "<<j<<" x= "<<x<<" y= "<<y<<endl;
   b[i][j]=a[x][y];
   //cout <<setw(4)<<b[i][j]<<setw(4)<<a[x][y]<<endl;
   if ((i==0||i==SIZE-1)&&j%2==0) {
    j++;
    continue;
   }
   if ((j==0||j==SIZE-1)&&i%2==1) {
    i++;
    continue;
   }
   if ((i+j)%2 ==0) {
    i--;
    j++;
   } else if((i+j)%2 ==1){
    i++;
    j--;
   }
  }
 }
 cout <<endl<<"變更後的矩陣"<<endl;
 i=0;j=0;
  for(i=0;i<SIZE;i++) {
  for(j=0;j<SIZE;j++) {
  cout <<setw(4)<<b[i][j]<<" ";
  }
  cout <<endl;
 }
}
其結果如下圖:

資料來源:
1.書籍:演算法之美:隱藏在資料結構背後的原理(C++版)
2.Z字形編排問題詳解(C++)

沒有留言:

張貼留言

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

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