8/1 Data Structure = ###### tags: `Coding X` `DS` 規格(Specification): 只知道樣貌 實作(Implementation): coding 效能分析(Performance analysis): Big O notation and time complexity ## Lab ### Lab 2-1 求最大公因數 GCD ```Java= package rec; import java.util.Scanner; public class rec { public static void main(String[] args) { Scanner input = new Scanner(System.in); int m = input.nextInt(); int n = input.nextInt(); System.out.println(gcd(m, n)); } public static int gcd(int m, int n) { if (n == 0) { return m; } else if (m < n) { return gcd(n, m); } else { return gcd(n, m % n); } } } ``` ### Lab 2-2 13張撲克牌玩接龍 ```Java= package poker; /* Algo * 洗牌: 用原有牌組+Random 將裡面的牌互相交換 * 抽牌: * 判斷arr第一張牌是不是對的數字 * if yes 直接new 一個矩陣將arrlen - 1 的所有值放入 輸出結果並回傳arr j-- 繼續判斷 * else no new 一個array 將 index +1 之後的所有東西放入,之後再將index 0 的放入 輸出結果並回傳arr 繼續判斷 */ import java.util.Random; public class Poker { public static void main(String[] args) { int[] PokerSet = { 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13 }; shuffleArray(PokerSet); // 洗牌 System.out.print("洗牌後:"); for (int i : PokerSet) { System.out.print(i + " "); } System.out.println(); int j = 13; while (PokerSet.length > 0) { if (j == PokerSet[0]) { PokerSet = extractArr(PokerSet); // 抽牌並更新array j--; // 更新要找的牌 } else { PokerSet = updateArr(PokerSet); // 重新排序並更新array } // 印出結果 for (int i = 0; i < PokerSet.length; i++) { switch (PokerSet[i]) { case 1: System.out.print('A' + " "); continue; case 11: System.out.print('J' + " "); continue; case 12: System.out.print('Q' + " "); continue; case 13: System.out.print('K' + " "); continue; default: System.out.print(PokerSet[i] + " "); // 其餘印出數字 } } System.out.println(); // 換行 } } public static void shuffleArray(int[] a) { int arrlen = a.length; Random rand = new Random(); for (int i = 0; i < arrlen; i++) { int change = rand.nextInt(arrlen); swap(a, i, change); } } public static void swap(int[] a, int i, int change) { int tmp = a[i]; a[i] = a[change]; a[change] = tmp; } // 抽牌 public static int[] extractArr(int[] arr) { int[] tmp = new int[arr.length - 1]; // 新的arr 長度需扣掉抽出的牌 for (int i = 1; i < arr.length; i++) { tmp[i - 1] = arr[i]; } return tmp; // 回傳新陣列 } // 數字不對時更新array public static int[] updateArr(int[] arr) { int[] tmp = new int[arr.length]; // new 長度一樣的arr tmp[arr.length - 1] = arr[0]; // 把不對的數字往後擺 for (int i = 1; i < arr.length; i++) { tmp[i - 1] = arr[i]; } return tmp; // 回傳新陣列 } } ```