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; // 回傳新陣列
}
}
```