調整 Lubuntu 的一些小技巧(Several tips for Lubuntu)

若您覺得文章寫得不錯,請點選文章上的廣告,來支持小編,謝謝。

在安裝裝好 Lubuntu 後,底下是筆者覺得可以做調整的事項。

1. 啟用額外的套件(Enable additional package repositories):
可以在Package Manager找到類似下圖的選項(筆者使用Muon Package Manager。)在Ubuntu Software分頁將自己要用的選項給打勾:
(Check the following options in the lubuntu package manager)



2. 系統更新(System Updating):

  • sudo apt update
  • sudo apt upgrade
  • sudo apt dist-upgrade

3. 安裝常用工具(Installing common utilities):

  • sudo apt-get install numlockx parcellite


4. 防火牆設定(Enable Firewall):

  • sudo ufw enable
  • sudo ufw disable
  • sudo apt install gufw


5. 安裝媒體編碼套件(Install media codec):

  • sudo apt install lubuntu-restricted-extras
  • sudo apt install libavcodec-extra
  • sudo apt install libdvd-pkg


6. 系統清理(System cleanup):

  • sudo apt-get autoclean
  • sudo apt-get clean
  • sudo apt-get autoremove


7. 系統加速(Speed up system):
Install preload package

  • sudo apt-get install preload

直線與斜率之 Scratch 3 程式

若您覺得文章寫得不錯,請點選文章上的廣告,來支持小編,謝謝。

學過直線方程式的人,會知道2維(2D)空間的直線方程式為:。而且我們可以用線上工具 https://www.desmos.com/calculator 來畫出幾個直線方程式的圖形:

Wikipedia對斜率的說明,可以得知有三種計算公式:點斜式兩點式斜截式。於是筆者設計了 Scratch 程式來讓電腦來畫圖。

Scratch 點斜式:https://scratch.mit.edu/projects/318807817


Scratch 兩點式:https://scratch.mit.edu/projects/318869134


Scratch 斜截式:https://scratch.mit.edu/projects/318957241

偷插電的資訊科學:用數字表示顏色之 Scratch程式

若您覺得文章寫得不錯,請點選文章上的廣告,來支持小編,謝謝。

配合偷插電的資訊科學:用數字表示顏色來使用。Scratch程式連結:https://scratch.mit.edu/projects/181995090

以二進位的方式來顯示圖形。
操作方式:
1. 按下綠旗產生基本圖形。
2. 點選一個正方形,會顯示黑色或白色。
3. 點選 Binary On/Off 按鈕來切換顯示方式。




Python 重複式迴圈語法

若您覺得文章寫得不錯,請點選文章上的廣告,來支持小編,謝謝。

在不考慮意外事件下,我們一年365天,每天都會吃三餐:早餐、午餐、晚餐。若Python要寫個模擬每天用餐的程式要怎麼寫呢?可能會有下面的寫法:
 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
print('第1天吃早餐、中餐、晚餐')
print('第2天吃早餐、中餐、晚餐')
print('第3天吃早餐、中餐、晚餐')
print('第4天吃早餐、中餐、晚餐')
print('第5天吃早餐、中餐、晚餐')
print('第6天吃早餐、中餐、晚餐')
print('第7天吃早餐、中餐、晚餐')
...
...
...
print('第359天吃早餐、中餐、晚餐')
print('第360天吃早餐、中餐、晚餐')
print('第361天吃早餐、中餐、晚餐')
print('第362天吃早餐、中餐、晚餐')
print('第363天吃早餐、中餐、晚餐')
print('第364天吃早餐、中餐、晚餐')
print('第365天吃早餐、中餐、晚餐')

哇!哇!哇!我們寫出上百行的程式碼囉!但是好像複製(Copy)與貼上(Paste)居多,CP值超高的程式師誕生了。恭喜,恭喜,恭喜。

一年過去了,在某天的下午,這位CP值超高的程式師翻起「蟒蛇Python養成日記」一書,看到書中的一個程式範例:
1
2
for day in range(1, 366):
    print('第' + str(day) + '天吃早餐、中餐、晚餐')

!!!程式師大驚!!!
???心想這是什麼寫法與觀念啊???
為什麼程式跑出來的結果和我一年前寫的一模一樣啊?!

於是程式師再度踏上學習之路,要好好學習這神奇的魔法:「重複式迴圈」。為了讓自己的學習更有心得,程式師所開始寫下筆記。首先了解range的用法:
1
range(start, stop, step)
start:起始值。
stop:結束值。
step:遞增值。

例如底下例子會輸出 1, 3, 5, 7, 9,
1
2
3
4
# 輸出 1 至 11 之間的奇數
# 不包含 11
for n in range(1, 11, 2):
  print(n, end=', ')

那要輸出 2, 4, 6, 8, 10,  的結果,該怎麼做呢?一個參考做法如下:
1
2
3
# 輸出 1 至 11 之間的偶數
for n in range(2, 11, 2):
  print(n, end=', ')


for迴圈(for Loop)
語法如下:
1
2
3
4
5
for 變數 in 序列:
    程式碼第1行
    程式碼第2行
    ...etc
    程式碼第n行

for loop範例:
 1
 2
 3
 4
 5
 6
 7
 8
 9
10
import string
# 列出小寫英文字母
for lowCase in string.ascii_lowercase:
    print(lowCase, end=',')

print()

# 列出大寫英文字母
for upCase in string.ascii_uppercase:
    print(upCase, end=',')

while迴圈(while Loop)
語法如下:
1
2
3
4
5
while 判斷敘述:
    程式碼第1行
    程式碼第2行
    ...etc
    程式碼第n行

while loop範例:
 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
import string
# 列出小寫英文字母
idx = 0
while idx < len(string.ascii_lowercase):
    print(string.ascii_lowercase[idx], end=',')
    idx = idx + 1

print()

# 列出大寫英文字母
idx = 0
while idx < len(string.ascii_uppercase):
    print(string.ascii_uppercase[idx], end=',')
    idx = idx + 1

巢狀迴圈(nested Loop)
語法如下:
1
2
3
4
5
6
for 變數 in 序列: 
    for 變數 in 序列: 
        程式碼第1行
        程式碼第2行
        ...etc
        程式碼第n行


1
2
3
4
5
6
while 判斷敘述:
    while 判斷敘述:
        程式碼第1行
        程式碼第2行
        ...etc
        程式碼第n行

nested loop範例:
1
2
3
4
5
6
7
# 九九乘法表
for i in range(1,10):
    for j in range(1,10):
        r =  i * j
        print ('%d * %d = %d' %(i, j , r), end="\t")

    print('')


 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
# 九九乘法表

i = 1
while i < 10:
    j = 1
    while j < 10:
        r =  i * j
        print ('%d * %d = %d' %(i, j , r), end="\t")
        j = j + 1
    i = i + 1
    print()

本部落的文章Python Tutor 線上Coding工具介紹一文說明了Python Tutor可以將程式碼視覺化來了解程式碼的運作流程,所以筆者建立的一個簡易的迴圈範例


Q腳獸試玩

若您覺得文章寫得不錯,請點選文章上的廣告,來支持小編,謝謝。

筆者手上的這套是由喬智創意機器人所提供的。要組好Q腳獸的材料如下:
  1. BBC micro:bit 開發板體驗包套件組
  2. MbitBot 多功能板
  3. Q腳獸材料包
  4. 聚合物鋰電池-1000mAh 3.7V

筆者依照「micro:bit X MbitBot 創造Q腳獸(一)」來組裝,未拆封的零件包如下圖:

組裝過程的一些照片如下:

Q腳獸組裝好後如下圖所示:


接著依照「趣玩MbitBot 單元(一) 用micro:bit 動起來!」與「micro:bit X MbitBot 創造Q腳獸(二)」來實作前進的功能,筆者的測試影片如下:

再來就是後退、左轉、右轉等功能。完整程式碼如下:

Demo 影片:


以上都是用積木式的方式來寫程式,但筆者想用Python來控制,此部分留待下次的文章囉。

APCS解題技巧

若您覺得文章寫得不錯,請點選文章上的廣告,來支持小編,謝謝。

底下分享筆者在解APCS實作題相關題目(如高中生解題系統LeetCodeUVa Online JudgeHackerRank等)以及APCS觀念題所用到的技巧。

一、看懂題目
這一點是最重要的,因為看不懂APCS的題目時,也就等於準備交白卷啦。但請在仔細想想,若看不懂題目時,要怎麼辦呢?這部分要怎麼讓自己增加看懂題目的能力呢?
請嘗試看很多不同的題目並看懂,但先不要解題。
請嘗試看很多不同的題目並看懂,但先不要解題。
請嘗試看很多不同的題目並看懂,但先不要解題。
為什麼要這樣子做呢?因為我們不知道APCS的題目類型會是怎麼樣,讓自己熟悉不同類型的題目時,就可以很快地知道題目的重點在那兒。底下分別以幾個例子說明APCS觀念題與實做題的一些題目類型。

觀念題部份(圖取自APCS官方提供的歷屆試題):

以上幾題主要是考遞迴函式的觀念,也包含函式迴圈判斷陣列等觀念。

實做題部份(圖取自APCS官方提供的歷屆試題):


這部份的每一次考試的試題會有四題,題目幾乎都是由易入難(第一題最簡單,第四題最困難),且每題都會說明評分方式,因此會有部份給分的情況,所以作答時應依自己最容易取得分數的部份開始做起

二、分析題目
遇到不熟悉的觀念題題目時,可以先用紙筆將程式的每一行程式碼執行結果記錄下來,這樣子可以了解程式碼的運算結果是什麼,接著再來分析這些結果有什麼規律來找出規則。實作題部份都會說明題目以及範例說明,基本上也是得看懂題目才能想出解法。根據官方所提供的實作題:2017-10-28_實作題_試題下載2017-03-04_實作題_試題下載2016-10-29_實作題_試題下載2016-03-05_實作題_試題下載。可以了解到,考題都是偏向要想出演算法來解題,所以除了程式語言的語法觀念外,還需熟悉一些基礎演算法,例如排序搜尋堆疊佇列等觀念。主流的程式語言通常會有這些常見演算法的函式可用,這部份在後面說明。

三、善用工具
朋友們有看過本部落格的「APCS 解題:特殊編碼」這篇文章嗎?這篇文章用了字典的觀念,並以C++、Java、Python三種程式語言來實作。疑!沒有用C程式語言來實作耶!這是因為C語言內建函式工具沒有支援hash table的資料結構。

這部份會用幾個例子來說明善用APCS所指定的程式語言:C、C++、Java、Python的工具函式會有多便利,先以最常見的排序與搜尋演算法當例子。

排序
C語言有內建的qsort。C++除了可以使用qsort外,還可以使用STL的sort。Java有Arrays.sortCollections.sort。Python則有list.sort與sorted可用。

搜尋
最常見的搜尋為線性搜尋二分搜尋。線性搜尋的演算容易實作出來,所以直接說明二分搜尋的部份。C語言有內建的bsearch。C++除了可以使用bsearch外,還可以使用STL的binary_search。Java有Arrays.binarySearchCollections.binarySearch。Python則有bisect模組可用。

String字串相關函式
熟悉一些字串操作的函式對實作是有幫助的,此處列出這四種程式語言相關函式之連結:常見的C語言字串函式常見的C++語言字串函式常見的Java語言字串函式常見的Python語言字串函式

大數運算
電腦的數值表示方式有上限值,比如整數最大值可能為232 - 1等於4,294,967,295 。要計算12345678901234567890 + 98765432109876543210 時,通常就會發生overflow了。但在Java語言中,可以使用BigInteger來解題,本部落格的文章:「高中生程式解題系統:大數運算」就是使用BigInteger來解題。

函式庫
以函式庫的豐富性來說,C語言的內建函式庫是最少的。這樣來說,對選用C語言實作的考生們不就吃虧大了?這也別擔心太多,根據筆者目前所看到的實作題題庫來說,出題方向很少會需要使用內建函式庫來解題的不過多了解程式語言的內建函式庫,可讓自己在解題有更多的選擇喔!因為APCS實作題是考解題方法,偏重演算法與資料結構,在這兩個主題上,C++可以學習Standard Template LibraryJava語言本身就有常見的資料結構可以使用了,用Java實作演算法也會比C與C++還容易一些;而Python也有內建資料結構可用,以及豐富的函式庫喔,這也是為什麼熟悉Python語法與內建函式庫的人,大多會選用Python來實作。

以上的資訊提供給要考APCS的考生們,希望對考生們在解題時有些幫助。

APCS 實作題 10610 第1題邏輯運算子參考解法

若您覺得文章寫得不錯,請點選文章上的廣告,來支持小編,謝謝。

題目說明請看高中生解題系統上的「c461: apcs 邏輯運算子 (Logic Operators)」或是底下圖片。


此題考C語言的「非零為True之觀念」,解法很單純,將非零的數值轉為True,以及邏輯運算就可以了。筆者用四種版本的語言來實作。

C 語言:
 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
#include <stdio.h>
#include <stdbool.h>

int main() {
  int a, b, c;

  while(scanf("%d %d %d", &a, &b, &c) == 3)
  {
    // 非零轉為True
    if(a > 0) a = true;
    if(b > 0) b = true;
    c == 1 ? true : false;

    bool hasAns = false;
    
    // 邏輯運算結果
    if( (a & b) == c )
    {
      printf("AND\n");
      hasAns = true;
    
    }
    if( (a | b) == c )
    {
      printf("OR\n");
      hasAns = true;
    }

    if( (a ^ b) == c )
    {
      printf("XOR\n");
      hasAns = true;
    }

    if( hasAns == false )
      printf("IMPOSSIBLE\n");
  }

  return 0;
}

C++語言:
 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
#include <iostream>
#include <cstdbool>

using namespace std;

int main() {
  int a, b, c;
  while(cin >> a >> b >> c)
  {
    // 非零轉為True
    if(a > 0) a = true;
    if(b > 0) b = true;
    c == 1 ? true : false;

    bool hasAns = false;
    // 邏輯運算結果
    if( (a & b) == c )
    {
      cout << "AND" << endl;
      hasAns = 1;
    }

    if( (a | b) == c )
    {
      cout << "OR" << endl;
      hasAns = 1;
    }

    if( (a ^ b) == c )
    {
      cout << "XOR" << endl;
      hasAns = 1;
    }

    if( hasAns == 0 )
      cout << "IMPOSSIBLE" << endl;
  }

  return 0;
}

Java語言:
 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
import java.util.*;

class Main {
  public static void main(String[] args) {
    Scanner cin = new Scanner(System.in);
  int a, b, c;
    boolean aFlag, bFlag, cFlag;

  while (cin.hasNext()) {
      a = cin.nextInt();
      b = cin.nextInt();
      c = cin.nextInt();

      // 非零轉為True
      aFlag = a > 0 ? true: false;
      bFlag = b > 0 ? true: false;
      cFlag = c > 0 ? true: false;
      
      boolean hasAns = false;
      // 邏輯運算結果
      if( (aFlag & bFlag) == cFlag )
      {
        System.out.println("AND");
        hasAns = true;
      }

      if( (aFlag | bFlag) == cFlag )
      {
        System.out.println("OR");
        hasAns = true;
      }

      if( (aFlag ^ bFlag) == cFlag )
      {
        System.out.println("XOR");
        hasAns = true;
      }

      if( hasAns == false )
        System.out.println("IMPOSSIBLE");
      }
  }
}

Python語言:
 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
import sys

for num in sys.stdin:
    a,b,c = list(map(int, num.split()))
    
    #非零轉為True
    if( a > 0):
      a = True
    else:
      a = False;
  
    if( b > 0):
      b = True
    else:
      b = False;
  
    if( c > 0):
      c = True
    else:
      c = False
  
    hasAns = False
    
    #邏輯運算結果
    if( (a & b) == c ):
      print("AND")
      hasAns = True

    if( (a | b) == c ):
      print("OR")
      hasAns = True

    if( (a ^ b) == c ):
      print("XOR")
      hasAns = True

    if( hasAns == False ):
      print("IMPOSSIBLE")

最後放個艾鍗科技對此題的解說影片:


Git repository 入門觀念與使用

若您覺得文章寫得不錯,請點選文章上的廣告,來支持小編,謝謝。

筆者的部落格有兩篇與git有關的文章,分別為:
  1. git 的五四三
  2. 程式碼控制軟體Git 介紹 ( Slides for Introduction to git )
而本篇為筆者要複習以前所學的筆記。我們都已經安裝好 git 了,且示範的作業系統為Lubunt 18.10。。

基本設定
在使用git的時候,會需要committer的一些資訊,例如名稱、電子郵件等,這時候我們可以透 過 git config 的指令來設定。而 git config 的詳細說明可以參考https://git-scm.com/docs/git-config。底下指令就是用來設定 committer 名稱與電子郵件:
git config --global user.name "Holan.Liao"
git config --global user.email Holan@your.email.address

也可設定編輯器(Editor),底下為設定使用 vim 做為編輯器:
git config --global core.editor vim
若是在Windows系統上時,
git config --global core.editor "'C:/Program Files/YourProgramFilePath' -multiInst -nosession"

換行結束符號設定:
git config --global core.autocrlf input
git config --global core.safecrlf true

Color Highlighting:
git config --global color.diff auto 
git config --global color.status auto
git config --global color.branch auto
or
git config --global color.ui auto

顯示目前的設定:
git config --list


建立 Repository
在建立 git repository之前,會需要建立專案程式碼的資料夾,此資料夾用來存放與專案有關的資料,所以會用 mkdir yourProjectName 指令來建立。接著在切換到此yourProjectName 資料夾下,用git init來建立 git repository,完整指令如下:
mkdir holanGitPrj
cd holanGitPrj
git init
註:請用 git init --bare 來建立 bare repository

提交Commit
建立好git repository後,需要將程式碼檔案加到repository裡,並commit才能做版本控制。這時需使用兩個指令:git addgit commit

請先建立一個程式碼檔案hello.c,內容如下:
1
2
3
4
5
#include <stdio.h>
int main(void) {
        printf("Hello git!\n");
        return 0;
}

接著執行底下指令:
git add hello.c
git commit -m "Hello git"

用 git status 指令來查看狀態:

出現「nothing to commit, working tree clean」代表目前資料夾下的檔案都已經進入到git repository做版本控制了。

接著修改 hello.c 檔案,內容如下:
1
2
3
4
5
6
#include <stdio.h>
int main(void) {
        printf("First Hello git!\n");
        printf("Second Hello git!\n");
        return 0;
}

存檔後以  git status 指令來查看狀態:
此時有看到「Changes not staged for commit 」,這表示我們的 hello.c 檔案有做變動(在working directory),但尚未加到 staging areagit directory。此部份觀念請參考這篇文章:「工作區、暫存區與儲存庫」。

請執行 git add hello.c 後以  git status 指令來查看狀態:
此時有看到「Changes to be committed」,表示 git repository 處在staging area 狀態,尚未進入到 git directory  狀態,用git commit 就可以進入到 git directory 狀態了:

可用 git log 來檢視 commit 歷史紀錄。此部份的指令如下:
git add hello.c
git status
git commit -m "Hello git updated 2"
git log

至此有沒有對 git 的使用有多了解一點呢?

TensorFlow Playground 簡易介紹 (Introduction to TensorFlow Playground)

若您覺得文章寫得不錯,請點選文章上的廣告,來支持小編,謝謝。

TensorFlow Playground是機器學習的視覺化實驗平台,TensorFlow Playground 是一個用JavaScript開發而成的網頁,可讓您在瀏覽器中模擬神經網路,藉由點選按鈕調整參數來體驗並了解神經網路是如何運作的,網頁的畫面如下圖:


上圖可以看到神經網路的資料集(Data)輸入層(Features)隱藏層(Hidden Layers)輸出層(Output)。從調整這幾個參數,朋友們可以慢慢了解神經網路的基本架構觀念。想了解細節的朋友們,可參考此連結的資料 https://www.zhihu.com/question/42995089 。快來試試點選、點選、點選,就可以把玩神經網路的TensorFlow Playground!!!

Scratch 3 官方線上教程

若您覺得文章寫得不錯,請點選文章上的廣告,來支持小編,謝謝。

想了解Scratch 3的朋友們,可以參考底下影片:


Scratch 官方有提供線上教材,進入線上版的Scratch,點選教程後:

可看到如下畫面:

以點選新手入門為例,點選後會看到如下畫面:

可看到教程顯示在畫面上(上圖紅色矩形內)。對動畫遊戲有興趣的朋友們,可點選教程內的動畫遊戲分類:

接著我們就可以依照官方的教材建立Scratch動畫與遊戲設計的基礎觀念,有基礎後,就可以發揮自己的想像力創造出屬於自己的獨一無二的動畫或遊戲了。

APCS 實作題 10706 第1題特殊編碼參考解法

若您覺得文章寫得不錯,請點選文章上的廣告,來支持小編,謝謝。

此題為APCS 2018 年 6 月檢測的第一題,題目來源為吳邦一老師所提供的「APCS 2018 年6 月實作題檢測題目分析與解答」,題目內容如下:
此題在高中生程式解題系統的題號為:e283: APCS 類似題 - 小崴的特殊編碼
筆者採取比較取巧的方式:「查表法」。於是就用字典來實作,Python程式碼如下:
 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
# 讀取正整數 N
n = int(input())

# 字母編碼的對應表
decodeL = {
    '0 1 0 1': 'A',
    '0 1 1 1': 'B',
    '0 0 1 0': 'C',
    '1 1 0 1': 'D',
    '1 0 0 0': 'E',
    '1 1 0 0': 'F'
    }

num = []

# 讀取每一行的字母編碼
for i in range(n):
    num.append(input())

# 查表輸出對應的字母
for i in range(n):
    print(decodeL[num[i]], end='')
註:此Python在高中生解題系統會拿到 83% 的分數,要怎麼修改成 100%呢?

Python 程式碼第二版
 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
import sys

# 字母編碼的對應表
decodeL = {
    '0 1 0 1': 'A',
    '0 1 1 1': 'B',
    '0 0 1 0': 'C',
    '1 1 0 1': 'D',
    '1 0 0 0': 'E',
    '1 1 0 0': 'F'
    }

num = []

for i in sys.stdin:
    # 讀取正整數 N
    n = int(i)
    result = ''

    # 讀取每一行的字母編碼
    for i in range(n):
        k = sys.stdin.readline().strip()
        result += decodeL[k]

    # 查表輸出對應的字母
    print(result)

C++程式碼如下:
 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
#include <iostream>
#include <map>
#include <vector>
#include <string>
using namespace std;

int main() {
  ios_base::sync_with_stdio(0);
  cin.tie(0);
  // 建立字母編碼表
  std::map<std::string, std::string> lDict;
  lDict["0 1 0 1"] = "A";
  lDict["0 1 1 1"] = "B";
  lDict["0 0 1 0"] = "C";
  lDict["1 1 0 1"] = "D";
  lDict["1 0 0 0"] = "E";
  lDict["1 1 0 0"] = "F";

  // 讀取正整數 n
  int n;
  while(cin >> n)
  {
    // get the return character
    cin.get();

    vector<string> lVec;
    string encodeStr;

    for(int i = 0; i < n; i++) {
        getline(std::cin, encodeStr);
        lVec.push_back(encodeStr);
    }

    for(int i = 0; i < n; i++) {
        encodeStr = lVec[i];
        cout << lDict[encodeStr];
    }

    cout << "\n";
  }

  return 0;
}

Java程式碼如下:
 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
import java.util.*; 

class Main {
  public static void main(String[] args) {
    Dictionary lDict = new Hashtable();
    lDict.put("0 1 0 1", "A");
    lDict.put("0 1 1 1", "B");
    lDict.put("0 0 1 0", "C");
    lDict.put("1 1 0 1", "D");
    lDict.put("1 0 0 0", "E");
    lDict.put("1 1 0 0", "F");

    Scanner scanner = new Scanner(System.in);
    int n = scanner.nextInt();
    scanner.nextLine();
    
    String str;
    Vector<String> strVec = new Vector<String>();
    
    for(int i = 0; i < n; i++) {
      str = scanner.nextLine();
      strVec.add(str);
    }

    for(int i = 0; i < n; i++) {
      System.out.print(lDict.get(strVec.get(i)));
    }
  }
}

除了吳邦一老師所用的方法與查表法之外,我們還可以有什麼方法呢?