APCS程式檢定懶人包告訴你從哪下手最快狠準!!(下)

APCS程式檢定懶人包告訴你從哪下手最快狠準!!(下)
APCS程式檢定懶人包告訴你從哪下手最快狠準!!(下)

正在研究APCS認證的你看這篇就對了!!有了事半功倍懶人包就距離成功更進一步啦!!(下)

本篇為上篇,下篇請點此APCS程式檢定懶人包告訴你從哪下手最快狠準!!(上)

程式設計實作題

  • 題型:共計 4 個題組,以撰寫完整程式或副程式計分。
  • 檢測與計分方式:為單節次檢測 (測驗時間 140 分鐘),滿分 400 分

實作題例題

問題描述

一次考試中,於所有及格學生中獲取最低分數者最為幸運,反之,於所有不及格同學中,獲取最高分數者,可以說是最為不幸,而此二種分數,可以視為成績指標。請你設計一支程式,讀入全班成績(人數不固定),請對所有分數進行排序,並分別找出不及格中最高分數,以及及格中最低分數。當找不到最低及格分數,表示對於本次考試而言,這是一個不幸之班級,此時請你印出:「worst case」;反之,當找不到最高不及格分數時,請你印出「best case」。註:假設及格分數為 60,每筆測資皆為 0~100 間整數,且筆數未定。

輸入格式

第一行輸入學生人數,第二行為各學生分數(0~100 間),分數與分數之間以一個空白間格。每一筆測資的學生人數為 1~20 的整數。

輸出格式

每筆測資輸出三行。
第一行由小而大印出所有成績,兩數字之間以一個空白間格,最後一個數字後無空白;
第二行印出最高不及格分數,如果全數及格時,於此行印出 best case;
第三行印出最低及格分數,當全數不及格時,於此行印出 worst case。

範例一:輸入

10
0 11 22 33 55 66 77 99 88 44

範例一:正確輸出

0 11 22 33 44 55 66 77 88 99
55
66

(說明)不及格分數最高為 55,及格分數最低為 66。

範例二:輸入

1
13

範例二:正確輸出

13
13 worst case

(說明)由於找不到最低及格分,因此第三行須印出「worst case」。

範例三:輸入

2
73 65

範例三:正確輸出

65 73
best case
65

(說明)由於找不到不及格分,因此第二行須印出「best case」。

評分說明

輸入包含若干筆測試資料,每一筆測試資料的執行時間限制(time limit)均為 2 秒, 依正確通過測資筆數給分。

針對實作題,我們分別使用 C、PythonJava 來解題,語法如下:

實作題解法#1 – 使用 C 語言(最費時):

#include < stdio.h >
#include < stdbool.h >

int len;
int *scores;

main()
{
    int i, j, tmp, highestUnpass, lowestPass;
    bool best=false, worst=false;
    scanf("%d", &len);
    scores = (int *)malloc(sizeof(int) * len);
    for (i=0;i < len;i++)
        scanf("%d", &scores[i]);
    for (i=0;i < len-1;i++)
        for(j=i+1;j < len;j++)
            if (scores[i] > scores[j])
            {
                tmp = scores[i];
                scores[i] = scores[j];
                scores[j] = tmp;
            }
    for (i=0;i < len;i++)
    {
        printf("%d", scores[i]);
        if (i < len-1)
            printf(" ");        
    }
    printf("\n");
    if (scores[len-1] < 60)
    {
        worst = true;
        highestUnpass = scores[len-1];
    }
    if (scores[0] >= 60)
    {
        best = true;
        lowestPass = scores[0];
    }
    if (worst == false && best == false)
    for (i=0;i < len;i++)
        if (scores[i] >= 60)
        {
            highestUnpass = scores[i-1];
            lowestPass = scores[i];
            break;
        }
    if (best)
        printf("best case\n");
    else
        printf("%d\n",highestUnpass);
    if (worst)
        printf("worst case\n");
    else
        printf("%d\n",lowestPass);
}

實作題解法#2 – 使用 Python 語言(最省時):

nums = int(input())
strScores = input()
scores = strScores.split(" ")
for i in range(len(scores)):
    scores[i] = int(scores[i])
scores.sort()
for i in range(len(scores)):
    print(scores[i], end="")
    if i < len(scores)-1:
        print(" ", end="")
print()
best = False
worst = False
if scores[len(scores)-1] < 60:
    worst = True
    highestUnpass = scores[len(scores)-1]
if scores[0] >= 60:
    best = True
    lowestPass = scores[0]
if best==False and worst == False:
    for i in range(len(scores)):
        if scores[i] > 60:
            lowestPass = scores[i]
            highestUnpass = scores[i-1]
            break
if best:
    print("best case")
else:
    print(highestUnpass)
if worst:
    print("worst case")
else:
    print(lowestPass)

實作題解法#3 – 使用 Java 語言(所花時間適中):

import java.lang.reflect.Array;
import java.util.Arrays;
import java.util.Scanner;

public class T01 {

    public static void main(String[] args) {
        // TODO Auto-generated method stub
        Scanner scanner = new Scanner(System.in);
        
        String nouse = scanner.nextLine();
        String data = scanner.nextLine();
        String[] strScores = data.split(" ");
        int len = strScores.length;
        int [] intScores = new int[len];
        int i;
        for (i=0;i < len;i++)
        {
            intScores[i] = Integer.parseInt(strScores[i]);
        }
        Arrays.sort(intScores);
        boolean best=false, worst=false;
        int highestUnpass = 0, lowestPass = 0;
        if (intScores[0] >= 60)
        {
            best = true;
            lowestPass = intScores[0];
        }
        if (intScores[intScores.length-1] < 60)
        {
            worst = true;
            highestUnpass = intScores[intScores.length-1];
        }
        
        for (i=0;i < len;i++)
        {
            System.out.print(intScores[i]);
            if (i < len-1)
                System.out.print(" ");              
        }
        System.out.println();
        if (best == false && worst == false)
        {
            for (i=0;i < len;i++)
            {       
                if (intScores[i] > 60)
                {
                    highestUnpass = intScores[i];
                    lowestPass = intScores[i-1];
                    break;
                }           
            }
        }
        if (best)
        {
            System.out.println("best case");
        }
        else
        {
            System.out.println(highestUnpass);
        }
        if (worst)
        {
            System.out.println("worst case");           
        }
        else
        {
            System.out.println(lowestPass);
        }                
    }
}

總結一下綜合比較的部分:

  • 學習上手速度:Python > Java > C
    (但 Python 與其他兩者程式語言差異較大,若一開始就選擇從 Python 語言上手 ,還是必須多花不少時間理解 C 語言,才能解答觀念題。)
  • 實際作答速度:Python > Java > C
    (Python 與 Java 都具備函式庫,在實作題作答時會比 C 語言快速。)

APCS 短期衝刺,從 Java 著手 CP 值最高!

以學習效果與所花時間的比值來說,學習 Java 的 CP 值較高。以下說明為什麼:

雖然 Python 堪稱「程式語言的瑞士刀」,其語法直觀、編寫簡潔快速,比起 C , Java 更容易上手,但由於觀念題是由 C 語言出題,若學 Python 再接觸 C ,對於有時間與其他課業壓力的考生來說,是相當辛苦、費時的。

Java 本身是由 C / C++為概念改良而成的語言,在設計之初,考量重點之一便是簡潔,因此學習與 C 語言語法架構相似的 Java ,讓考生有操作基礎後再學習 C 語言,更能在檢測學習之路,更加如魚得水。

綜合以上觀點,投資在能兼顧「理論題」與「實務題」的 Java,才是事半功倍、投報率最高的首選!

最後貼心提醒:109 年第 2 次 APCS 檢測暫訂 2020 年 7 月 4 日!

各位考生可以開始逐步準備 APCS 檢測囉!

 

 

更多關於APCS的文章請點下方連結,或到本部落格首頁搜尋喔!!

 

 

 

其他閱讀

從哆啦A夢到 iPhone…為何 UI 設計用「圓角」就是比較討喜?

APCS 程式檢定,該從 CJava 還是 Python 下手?

【前端工程師CSS教學】float浮動屬性

AI人工智慧救地球!GoogleAI 保護環境還比人類快 3000

所有APCS認證要知道的事都在這!!()

前端工程師起步的t初學小課(22):數學物件

如何分辨全端,後端和前端工程師?還不知道的可是不行的喔~

APCS程式檢定懶人包告訴你從哪下手最快狠準!!(上)

APCS程式檢定懶人包告訴你從哪下手最快狠準!!(上)
APCS程式檢定懶人包告訴你從哪下手最快狠準!!(上)

正在研究APCS認證的你看這篇就對了!!有了事半功倍懶人包就距離成功更進一步啦!!(上)

第一次考 APCS 程式語言,從哪個程式語言下手才會事半功倍呢?

若是一開始就選到一個好上手、測驗時又好作答的程式語言,就可以減少準備時間和學習負擔!本篇文章將以三款詢問度較高的應考語言 C , Java , Python 來做解析、比較。

此篇你將了解…

  1. 1. APCS 檢測的規範與基礎
  2. 2. C , Java , Python – 哪個語言適合解題?

先來了解一下檢測內容的基礎概念,APCS 的兩大題組 【觀念題】與【實作題】

程式設計觀念題

  • 題型:單選題 (含題組),以運算思維、問題解決與程式設計概念測試為主。
  • 檢測與計分方式:分兩節次檢測 (單節測驗時間60分鐘), 檢測分數為合併計分,滿分100分

觀念題例題#1

1. 右側程式碼,執行時的輸出為何?

  1. (A) 0 2 4 6 8 10
  2. (B) 0 1 2 3 4 5 6 7 8 9 10
  3. (C) 0 1 3 5 7 9
  4. (D) 0 1 3 5 7 9 11
void main() {
    for (int i=0; i<=10; i=i+1) {
        printf ("%d ", i);
        i = i + 1;
    }
    printf ("\n");
}

(出自 105 年 3 月 5 日,理論題第 15 題)

這一題主要要測驗的內容,是考驗考生是否了解 C 語言當中, for 迴圈的結構。

以 for 迴圈來說,三的區段的值分別是初始值、條件值、運算值。

在這一題當中,第一次執行的時候 i 為 0 ,所以會先印出 0。

接下來,由於第四行 i=i+1 的關係, i 會變為 1 。但是執行迴圈時,回到了 for 的第三部分,這時候,還是另外一次的 i=i+1 ,所以 i 變為 2,然後進行驗證, i <= 10

根據這樣的執行邏輯, i 每印出一個就會 +2 一次,直到 i 超過 10 之後跳出迴圈。

Ans:所以會印出「0 2 4 6 8 10」

觀念題例題#2

2. 若以 f(22)呼叫右側 f()函式,
總共會印出多少數字?

  1. (A) 26
  2. (B) 22
  3. (C) 11
  4. (D) 15
void f(int n) {
    printf ("%d\n", n);
    while (n != 1) {
        if ((n%2)==1) {
            n = 3*n + 1;
        }
        else {
            n = n / 2;
        }
        printf ("%d\n", n);
    }
}

(出自 105 年 3 月 5 日,理論題第 21 題)

本題所考內容,是對於 while 與 if 的熟悉度。

傳入 22 進 function 之後,會先印出 22。

接下來進入 while 迴圈,如果 n 不是 1 ,那麼這個迴圈會一直執行。

while 當中, 如果 n 是奇數,則 n 會變成 3xn+1 ,如果 n 是偶數,那 n 會變成原來的一半。

所以整個流程會是「22➔11➔34➔17➔52➔26➔13➔40➔20➔10➔5➔16➔8➔4➔2➔1」。

Ans:所以答案是 16 個。

 

 

本篇為上篇,下篇請點此APCS程式檢定懶人包告訴你從哪下手最快狠準!!(下)

更多關於APCS的文章請點下方連結,或到本部落格首頁搜尋喔!!

 

 

 

其他閱讀

從哆啦A夢到 iPhone…為何 UI 設計用「圓角」就是比較討喜?

APCS 程式檢定,該從 CJava 還是 Python 下手?

【前端工程師CSS教學】float浮動屬性

AI人工智慧救地球!GoogleAI 保護環境還比人類快 3000

所有APCS認證要知道的事都在這!!()

前端工程師起步的t初學小課(22):數學物件

如何分辨全端,後端和前端工程師?還不知道的可是不行的喔~

 

所有APCS認證要知道的事都在這!!(下)

所有APCS認證要知道的事都在這!!(下)
所有APCS認證要知道的事都在這!!(下)

聽過APCS認證嗎?想更詳細的瞭解這認證的知識嗎?今天幫大家整理了一些資訊~快來了解看看吧!!(下)

「大資工時代」下 人人都得會的程式設計

根據 108 年的志願分析,隨著台灣社會越發重視 AI 相關產業,資工、資管系在第二類組志願排序越來越往前,前十五名占了八個,成大資工系分數超過台大土木,台大資工系分數也逼近台大電機系,被稱為「大資工時代」來臨。

而在台灣 AI 產業蓬勃發展下,資工、資管系只會越來越熱門。不僅如此,為了因應就業市場,人文社會科系也紛增程式設計課,從公立如台師大、私立如元智大學等都要求人文社會科系學生必修程式設計,台師大甚至還另有數位人文與藝術應用、資訊科技及未來教育、資訊科技應用,以及人工智慧學程等等進階學程,來抵抗因 AI 而失業的危機。

更別說就業市場上已有 AI 搶飯碗的擔憂,尚在學的莘莘學子更不能不先為將來出社會先做設想啊!

從零開始的 APCS 檢測……怎麼樣才能有效率拿高分?

放心,就算之前完全沒接觸過軟體設計也沒關係,只要選擇好的管道就可以!但如果只是買幾本參考書自學、做做考古題是很難拿到高分的,也不適合初學者。

想靈活又全面地學習各種程式語言,最好還是報名 APCS檢定 專門課程,尤是要挑選以程式語言培訓為主的補習班,例如專攻 IT 人才培育的「達內教育」。讓專業老師幫你講解、規劃課程,不需要自己額外費心費力找資料,跟著老師幫你準備好的課程、講義、考古題,一步步輕鬆攻略 APCS認證

 

更多APCS認證相關文章請點下方連結喔~

 

 

 

其他閱讀

Python不是蟒蛇,Java是咖啡,奇葩的程式語言命名起源

PythonJava寫程式時,聽什麼音樂能增加效率?

JavaPython…初學者該從哪個程式語言下手?

APCS 是什麼?所有 APCS 檢定的問題這篇都會回答你!

Python學員找工作免擔心!!就業種類選擇看這篇!!

Java免費開發工具大放送!!再也不用擔心沒得練習啦!!

想在短時間內掌握Python?學好這些語法很重要!!

所有APCS認證要知道的事都在這!!(中)

所有APCS認證要知道的事都在這!!(中)
所有APCS認證要知道的事都在這!!(中)

聽過APCS認證嗎?想更詳細的瞭解這認證的知識嗎?今天幫大家整理了一些資訊~快來了解看看吧!!(中)

學測失利也免驚!檢測高分、紅利級分幫你順利上榜

你是否會因為緊張而在大考時無法發揮實力呢?APCS 對在學測失分的同學們也是一大福音,根據透過 APCS 組順利錄取中央大學資工系的黃允誠同學就表示:檢測高分可彌補學測失分。由於他的學測自然考 11 級分,原無望錄取中字輩大學資工科系,但靠著在 APCS 的優異表現而順利上榜。

除此之外,APCS 組申請大學的紅利級分最高可達 18 級分!何謂紅利級分?直接舉例說明,如今年師大資工系一般組別的錄取門檻為「英文 13 級分、數學 15 級分」,而 APCS 組別「英文 10 級分、數學 12 級分」,相比之下英文數學各低了 3 級分,這 3 級分就稱為紅利級分。想申請頂大的同學們,一定要把握這個機會!

不只應屆畢業生 全台高中生皆紛紛報考 APCS

最近一場 APCS 檢測結束後,主辦單位日前公布了約三千名考生報名,其中高中生比例佔了四成以上,估計與升學導向有關。有許多確定志向、資工系志願的高一、高二同學報考 APCS檢定,不讓高三應屆生獨占鰲頭。

事實上,隨著人工智慧時代來臨,教育部推廣資訊教育扎根高中校園,也使得具備程式設計能力的高中生越來越多,未來預期競爭也會更趨激烈。

如果你是高一、高二生,建議先了解APCS認證的相關資訊,參考一下測驗時程,提早同儕做準備、多他人一分努力,才有機會脫穎而出。而且將來在大學階段也可以用 APCS 分數抵免大學學分喔!

 

更多APCS認證相關文章請點下方連結喔~

 

 

 

其他閱讀

Python不是蟒蛇,Java是咖啡,奇葩的程式語言命名起源

PythonJava寫程式時,聽什麼音樂能增加效率?

JavaPython…初學者該從哪個程式語言下手?

APCS 是什麼?所有 APCS 檢定的問題這篇都會回答你!

Python學員找工作免擔心!!就業種類選擇看這篇!!

Java免費開發工具大放送!!再也不用擔心沒得練習啦!!

想在短時間內掌握Python?學好這些語法很重要!!

所有APCS認證要知道的事都在這!!(上)

所有APCS認證要知道的事都在這!!(上)
所有APCS認證要知道的事都在這!!(上)

聽過APCS認證嗎?想更詳細的瞭解這認證的知識嗎?今天幫大家整理了一些資訊~快來了解看看吧!!(上)


▲許多頂大的資工科系已採用 APCS 檢測成績為多元入學的參考依據,讓具備程式設計能力的高中職學生,現在可善用程式設計的專長升學。

學測已放榜一段時間,相信許多同學已如火如荼地投入「書面資料審查」的準備。現今大學多元入學的方針讓「面試」+「備審」的重要性大幅上升,即使入學不再是「成績至上」,但要如何豐富自己的學經歷,做出一份專美於前、讓教授眼睛一亮的備審,甚至靠「APCS認證」就順利錄取頂大呢?

這裡整理了APCS檢定懶人包,讓你快速了解為何報考 APCS 好處多多,最後還會教你如何有效率地考出好成績喔!

APCS 是什麼?

APCS 是「大學程式設計先修檢測」(Advanced Placement Computer Science)。旨在檢測考生程式設計的能力。分為「觀念題」和「實作題」兩部分,囊括 OS、C++、Java、Python 等程式設計軟體,讓具備程式設計能力的高中職學生有一個具有公信力的檢測機制。

APCS 成績除了是申請入學中「APCS 組」的必要成績外,也是多校特殊選才等多元入學管道重要參考資料,想就讀資訊工程、資訊管理等資訊類相關學系的同學們不可不備的檢測。

採用 APCS 的大學有哪些?APCS 成績很重要嗎?

109 年「個人申請」包含頂大在內共有 38 學系將 APCS 成績列入第一階段的篩選門檻中,以「APCS 組」的形式招生,總計共 91 個名額。而未來預計會逐年增多。

▲清華大學資訊工程學系 APCS 組簡章

以清華大學資訊工程學系 APCS 組為例,從簡章上我們可以看到「APCS 觀念題、實作題達 4 級分」之考生為第一階段篩選條件;再用實作題篩選出 20(篩選倍率)*3(招生名額)=60名考生,再從這 60 名考生中用數學學測成績 10(篩選倍率)*3(招生名額)=30名考生進入二階面試。由此可知,APCS 是申請流程中最重要的門檻。

就算不是 APCS 組,一般組也往往建議申請時附上 APCS 成績,以成大和師大資工系簡章為例:


▲ 成功大學、臺灣師範大學資訊工程學系簡章都包含 APCS

由以上範例可知,可說是所有資訊類相關校系申請時都需要 APCS 成績!

 

更多APCS認證相關文章請點下方連結喔~

 

 

 

其他閱讀

Python不是蟒蛇,Java是咖啡,奇葩的程式語言命名起源

PythonJava寫程式時,聽什麼音樂能增加效率?

JavaPython…初學者該從哪個程式語言下手?

APCS 是什麼?所有 APCS 檢定的問題這篇都會回答你!

Python學員找工作免擔心!!就業種類選擇看這篇!!

Java免費開發工具大放送!!再也不用擔心沒得練習啦!!

想在短時間內掌握Python?學好這些語法很重要!!