【JSB00】Blockly 解題基礎一(基礎練習1)
變數、基本輸入輸出、條件判斷、計數累加、九九乘法(共 14 題)
🎯 核心觀念:基本輸入輸出(I/O)、字串連接 | 建議變數:名字
在程式設計的第一步,最重要的是能夠讀取使用者輸入,並將結果正確輸出。
請你寫一個小程式,讓使用者輸入自己的名字,然後程式要輸出一行「Hello, 名字」。
Hello後面會接小寫逗號,還有一個空白輸入
這樣的練習可以幫助你理解輸入與輸出,是學習程式設計的基礎。
範例輸出 (Output):
Hello, Amy
🧩 積木拼裝流程步驟:
- 從事件拉出「當 🚩 被點擊」
- 從互動拉出「詢問 [請輸入名字] 並等待」
- 從變數拉出「變數 [名字] 設為」接在下方,填入互動的「回答」
- 從互動拉出「說出」積木
- 從文字拉出「建立文字(join)」積木,組合兩項:
- 文字項目 1:`Hello, `(注意逗號後面有一個半形空格)
- 文字項目 2:變數 [名字]
💻 參考程式碼(JavaScript 邏輯驗證):
// 讀取名字並說出問候語
let 名字 = askAndWait("請輸入名字");
print("Hello, " + 名字);
⚠️ 備課與解題提醒:注意輸出中的英文逗號後方有一個半形空格 `Hello, Amy`,若漏掉空格評測會不通過。
🎯 核心觀念:連續多筆輸入、多文字連接 | 建議變數:朋友一、朋友二
在程式設計的第一步,最重要的是能夠讀取使用者輸入,並將結果正確輸出。
請你寫一個小程式,讓使用者輸入好朋友一的名字、接著輸入好朋友二的名字,然後程式要輸出一行「朋友一名字,朋友二名字, 一起學習吧!」。
朋友一名字後面、朋友二名字後面都會接小寫逗號,還有一個空白輸入
這樣的練習可以幫助你理解輸入與輸出,是學習程式設計的基礎。
範例輸出 (Output):
Amy, John, 一起學習吧!
🧩 積木拼裝流程步驟:
- 從事件拉出「當 🚩 被點擊」
- 從互動拉出「詢問 [請輸入朋友一] 並等待」
- 從變數將「朋友一」設為「回答」
- 從互動再次拉出「詢問 [請輸入朋友二] 並等待」
- 從變數將「朋友二」設為「回答」
- 從互動拉出「說出」積木
- 從文字拉出「建立文字」積木(展開齒輪擴充為 4 個插槽):
1. 變數 [朋友一]
2. 字串 `, `(逗號+空白)
3. 變數 [朋友二]
4. 字串 `, 一起學習吧!`(注意前面有逗號與空格,最後為全形驚嘆號)
💻 參考程式碼(JavaScript 邏輯驗證):
let 朋友一 = askAndWait();
let 朋友二 = askAndWait();
print(朋友一 + ", " + 朋友二 + ", 一起學習吧!");
⚠️ 備課與解題提醒:輸入兩行名字,每次 `askAndWait` 會自動抓取下一筆輸入。標點符號需與題目範例完全一致(逗號空格 + 中文驚嘆號)。
🎯 核心觀念:數字變數、加法運算 | 建議變數:數字一、數字二
當我們要處理數字時,常常需要加總。
請設計一個程式,讓使用者輸入兩個數字,程式要輸出這兩個數字的總和。
這樣的題目能幫助你熟悉數字資料處理。
🧩 積木拼裝流程步驟:
- 從互動拉出「詢問 並等待」,將變數 [數字一] 設為「回答」
- 從互動再次拉出「詢問 並等待」,將變數 [數字二] 設為「回答」
- 從互動拉出「說出」
- 在說出後方放入數學的加法運算積木:`[數字一] + [數字二]`
💻 參考程式碼(JavaScript 邏輯驗證):
let 數字一 = Number(askAndWait());
let 數字二 = Number(askAndWait());
print(數字一 + 數字二);
⚠️ 備課與解題提醒:在 Blockly 運算時,回答的文字在放入數學運算積木後會自動轉型為數值做加法。
🎯 核心觀念:平均計算、四捨五入(round) | 建議變數:數字一、數字二、平均
當我們要處理數字時,常常需計算平均。
請設計一個程式,讓使用者輸入兩個數字,程式要輸出這兩個數字的平均(四捨五入取整數)。
這樣的題目能幫助你熟悉數字資料處理。
🧩 積木拼裝流程步驟:
- 詢問並讀取變數 [數字一]
- 詢問並讀取變數 [數字二]
- 變數 [平均] 設為:從數學拉出「四捨五入(round)」積木,裡面放入 `([數字一] + [數字二]) / 2`
- 互動說出 變數 [平均]
💻 參考程式碼(JavaScript 邏輯驗證):
let a = Number(askAndWait());
let b = Number(askAndWait());
let avg = Math.round((a + b) / 2);
print(avg);
⚠️ 備課與解題提醒:除以 2 會有小數(例如 (9+4)/2 = 6.5),題目要求「四捨五入取整數」,必須使用【數學】類別中的「四捨五入」積木,6.5 就會成為 7。
🎯 核心觀念:條件分支(if - else if - else) | 建議變數:數字一、數字二
在生活中常常會需要比較兩個數字誰比較大。
請寫一個程式,輸入兩個整數,輸出較大的數字。
如果兩個數字相同,就輸出「一樣大」。
這樣的練習可以訓練你使用條件判斷。
🧩 積木拼裝流程步驟:
- 讀取 [數字一] 與 [數字二]
- 從邏輯拉出「如果...否則如果...否則...」(點擊齒輪展開)
- 分支 1:如果 `[數字一] > [數字二]`,則互動說出 [數字一]
- 分支 2:否則如果 `[數字二] > [數字一]`,則互動說出 [數字二]
- 分支 3:否則,互動說出 字串「一樣大」
💻 參考程式碼(JavaScript 邏輯驗證):
let a = Number(askAndWait());
let b = Number(askAndWait());
if (a > b) {
print(a);
} else if (b > a) {
print(b);
} else {
print("一樣大");
}
⚠️ 備課與解題提醒:注意兩數相等時的邊界條件,輸出必須是精確的中文「一樣大」。
🎯 核心觀念:單位換算、條件比較、字串單位組合 | 建議變數:M、N、台斤轉公斤
在生活中常常會需要比較重量,台灣常見的單位有台斤、公斤,一台斤等於0.6公斤
請寫一個程式,輸入兩個不同單位重量
第一個數字輸入M,表示重量M台斤
第二個數字輸入N,表示重量N公斤
請比較兩筆重量輸入,輸出較大重量的數字及單位。
如果兩個數字相同,就輸出「一樣重」。
這樣的練習可以訓練你使用條件判斷。
🧩 積木拼裝流程步驟:
- 詢問並讀取 [M](台斤),詢問並讀取 [N](公斤)
- 計算變數 [台斤轉公斤] = `[M] * 0.6`
- 判斷分支:
- 如果 `[台斤轉公斤] > [N]`:說出文字連接(`[M]`, `台斤`)
- 否則如果 `[N] > [台斤轉公斤]`:說出文字連接(`[N]`, `公斤`)
- 否則:說出字串「一樣重」
💻 參考程式碼(JavaScript 邏輯驗證):
let m = Number(askAndWait());
let n = Number(askAndWait());
let kg = m * 0.6;
if (kg > n) {
print(m + "台斤");
} else if (n > kg) {
print(n + "公斤");
} else {
print("一樣重");
}
⚠️ 備課與解題提醒:輸出要帶原單位的數字和單位,如「10台斤」或「5公斤」,若重量相等則輸出「一樣重」。
🎯 核心觀念:餘數運算(modulo)、奇偶數判斷 | 建議變數:數字
程式設計中,常常需要根據數字的性質進行分類。
請你寫一個程式,輸入一個整數,如果這個數除以2的餘數為0,表示是偶數,輸出 Even,如果餘數是1,表示是奇數,輸出 Odd。
這樣的練習可以幫助你熟悉條件判斷的應用。
🧩 積木拼裝流程步驟:
- 詢問並讀取變數 [數字]
- 從邏輯拉出「如果...否則...」
- 條件為:`[數字] 除以 2 的餘數 == 0`(從數學使用「餘數」積木)
- 如果是 0:說出字串「Even」
- 否則:說出字串「Odd」
💻 參考程式碼(JavaScript 邏輯驗證):
let n = Number(askAndWait());
if (n % 2 === 0) {
print("Even");
} else {
print("Odd");
}
⚠️ 備課與解題提醒:注意英文大小寫,為首字母大寫的「Even」與「Odd」。
🎯 核心觀念:多重區間條件判斷(等第制) | 建議變數:成績
不少學校成績採用等弟制,80~100為A,70~79為B,60~69為C,50~59為D,其餘49分以下為E
請你寫一個程式,輸入一個整數(0~100),輸出對應的成績等弟。
這樣的練習可以幫助你熟悉條件判斷的應用。
🧩 積木拼裝流程步驟:
- 詢問並讀取變數 [成績]
- 使用多重「如果...否則如果...否則...」:
- 如果 `成績 >= 80`:說出「A」
- 否則如果 `成績 >= 70`:說出「B」
- 否則如果 `成績 >= 60`:說出「C」
- 否則如果 `成績 >= 50`:說出「D」
- 否則:說出「E」
💻 參考程式碼(JavaScript 邏輯驗證):
let score = Number(askAndWait());
if (score >= 80) {
print("A");
} else if (score >= 70) {
print("B");
} else if (score >= 60) {
print("C");
} else if (score >= 50) {
print("D");
} else {
print("E");
}
⚠️ 備課與解題提醒:判斷順序必須從高分往低分(或低分往高分)循序排查,否則區間會被提早攔截。
🎯 核心觀念:計數迴圈、累加變數、格式化字串輸出 | 建議變數:筆數、目前成績、總分、平均、結果
小明參加了數學、英文、自然三科的段考,老師希望能快速算出總分與平均分數,並判斷是否及格。
請設計程式,輸入三科的成績,計算總分與平均。
平均成績以四捨五入取到整數
如果平均分數大於等於 60,就輸出「及格」,否則輸出「不及格」。
這題可以訓練你如何處理多筆資料的加總、平均計算,並搭配條件判斷。
🧩 積木拼裝流程步驟:
- 詢問並讀取 [筆數]
- 將 [總分] 初始化設為 0
- 使用迴圈「重複 [筆數] 次」:
- 詢問並讀取 [目前成績]
- 將 [總分] 設為 `[總分] + [目前成績]`
- 將 [平均] 設為 `四捨五入([總分] / [筆數])`
- 判斷:如果 `平均 >= 60` 則 [結果] = "及格",否則 [結果] = "不及格"
- 說出文字連接:`[總分]` + `" "` + `[平均]` + `" "` + `[結果]`
💻 參考程式碼(JavaScript 邏輯驗證):
let count = Number(askAndWait());
let total = 0;
for (let i = 0; i < count; i++) {
let score = Number(askAndWait());
total += score;
}
let avg = Math.round(total / count);
let result = avg >= 60 ? "及格" : "不及格";
print(total + " " + avg + " " + result);
⚠️ 備課與解題提醒:測試案例驗證時輸出為一行「總分 平均 結果」,中間以半形空白隔開。
🎯 核心觀念:折扣計算、無條件捨去(floor)、多變數處理 | 建議變數:筆數、定價1、定價2、定價3、定價總額、售價總額、優惠金額
大南百貨進行第二、第三件優惠活動,購買3件物品,第2件9折,第3件8折。
請設計程式,依序輸入三件物品的定價,計算三件物品合計售價,以及最後優惠多少元。
每件物品打折後價格以無條件捨去取整數
程式最後輸出 定價加總總額、售價加總總額、優惠多少元
範例輸出 (Output):
240
215
25
🧩 積木拼裝流程步驟:
- 讀取筆數(3)
- 依序讀取三個物品的定價:[定價1], [定價2], [定價3]
- [定價總額] = `定價1 + 定價2 + 定價3`
- 第2件實售 = `無條件捨去(定價2 * 0.9)`(在數學取整積木選「無條件捨去」)
- 第3件實售 = `無條件捨去(定價3 * 0.8)`
- [售價總額] = `定價1 + 第2件實售 + 第3件實售`
- [優惠金額] = `定價總額 - 售價總額`
- 說出文字連接:`定價總額` + `" "` + `售價總額` + `" "` + `優惠金額`
💻 參考程式碼(JavaScript 邏輯驗證):
let count = Number(askAndWait());
let p1 = Number(askAndWait());
let p2 = Number(askAndWait());
let p3 = Number(askAndWait());
let orig = p1 + p2 + p3;
let sale2 = Math.floor(p2 * 0.9);
let sale3 = Math.floor(p3 * 0.8);
let sale = p1 + sale2 + sale3;
let discount = orig - sale;
print(orig + " " + sale + " " + discount);
⚠️ 備課與解題提醒:注意題目要求「無條件捨去取整數」,如 65*0.9 = 58.5 捨去後為 58。輸出三個數值以空白隔開。
🎯 核心觀念:計數迴圈(for loop)、數列連續累加 | 建議變數:N、總和、i
有時候我們需要計算從 1 到某個數字的總和。
請寫一個程式,輸入一個整數 N,計算從 1 加到 N 的結果。
例如 N=5 時,1+2+3+4+5=15。這樣的練習可以訓練你使用迴圈進行加總。
🧩 積木拼裝流程步驟:
- 詢問並讀取變數 [N]
- 變數 [總和] 設為 0
- 從迴圈拉出「計數迴圈 變數 [i] 從 1 到 [N] 間隔 1」:
- 將 [總和] 設為 `[總和] + [i]`
- 互動說出 變數 [總和]
💻 參考程式碼(JavaScript 邏輯驗證):
let n = Number(askAndWait());
let sum = 0;
for (let i = 1; i <= n; i++) {
sum += i;
}
print(sum);
⚠️ 備課與解題提醒:迴圈起始值為 1,結束值為 N,間隔 1。累加變數初始化一定要設為 0。
🎯 核心觀念:連續乘積(階乘 factorial)、乘法累乘 | 建議變數:N、總積、i
輸入一個整數 N,計算從 1*2*3....*N 的結果。
例如 N=5 時,1*2*3*4*5=120。
這樣的練習可以訓練你使用迴圈計算。
🧩 積木拼裝流程步驟:
- 詢問並讀取變數 [N]
- 變數 [總積] 設為 1(重要:不可設為0,否則任何數乘以0皆為0)
- 從迴圈拉出「計數迴圈 變數 [i] 從 1 到 [N] 間隔 1」:
- 將 [總積] 設為 `[總積] * [i]`
- 互動說出 變數 [總積]
💻 參考程式碼(JavaScript 邏輯驗證):
let n = Number(askAndWait());
let prod = 1;
for (let i = 1; i <= n; i++) {
prod *= i;
}
print(prod);
⚠️ 備課與解題提醒:累乘的初值必須設為 1,這是初學者最容易犯錯的陷阱。
🎯 核心觀念:迴圈輸出字串拼接、九九乘法 | 建議變數:N、i、輸出文字
請寫一個程式,輸入一個整數 N,輸出 1 到 9 的乘法表結果。
例如輸入 3,輸出 1x3=3, 2x3=6, …, 9x3=27。
程式輸出3 6 9 12 15 18 21 24 27
這樣的練習能讓你熟悉迴圈的運用。
範例輸出 (Output):
3 6 9 12 15 18 21 24 27
🧩 積木拼裝流程步驟:
- 詢問並讀取 [N]
- [輸出文字] 設為空字串 `""`
- 「計數迴圈 變數 [i] 從 1 到 9 間隔 1」:
- 計算目前積 `項 = i * N`
- 如果 `i == 1`:[輸出文字] 設為 `項`
- 否則:[輸出文字] 設為 `建立文字([輸出文字], " ", 項)`
- 說出 [輸出文字]
💻 參考程式碼(JavaScript 邏輯驗證):
let n = Number(askAndWait());
let res = [];
for (let i = 1; i <= 9; i++) {
res.push(i * n);
}
print(res.join(" "));
⚠️ 備課與解題提醒:各項數值之間以單一半形空白間隔,開頭與結尾不能有多餘空格。
🎯 核心觀念:未知長度數列讀取與累加 | 建議變數:N、總次數、次數
體育課上,學生進行跳繩小組競賽比賽,小組人數不定,每人跳的次數也不同。
請設計一個程式,第一行輸入數字N,代表小組有N人,後續輸入N筆資料
第二行輸入一串數列共N筆整數,序列的數字以空隔間格。
程式輸出小組全部人員總共跳繩幾次?
範例輸入 (Input):
5
20 19 36 25 30
🧩 積木拼裝流程步驟:
- 詢問並讀取 [N](組員人數)
- [總次數] 設為 0
- 使用「重複 [N] 次」:
- 詢問並讀取 [次數]
- [總次數] 設為 `[總次數] + [次數]`
- 說出 [總次數]
💻 參考程式碼(JavaScript 邏輯驗證):
let n = Number(askAndWait());
let sum = 0;
for (let i = 0; i < n; i++) {
let val = Number(askAndWait());
sum += val;
}
print(sum);
⚠️ 備課與解題提醒:第二行的數字以空白分隔,Blockly 的 `askAndWait` 會依序讀入各個數值。
【JSA00】Blockly 解題陣列基礎(基礎練習2)
極值查找、質數因數、清單陣列、字串統計、動態密碼、最大公因數(共 12 題)
🎯 核心觀念:找最大值(Max Algorithm) | 建議變數:N、最大值、目前數值
老師進行成績統計,老師輸入每位同學的成績,請你寫一個程式找出最高分。
輸入第一行是整數 N,代表有 N 筆成績
第二行輸入 N 個數字,數字間以空白間隔
程式輸出最大值。
這樣的練習可以幫助你處理一串資料,並找出其中的最大值。
🧩 積木拼裝流程步驟:
- 詢問並讀取 [N]
- 詢問讀取第 1 個數字,將 [最大值] 設為該數字
- 使用「重複 [N - 1] 次」:
- 詢問讀取 [目前數值]
- 如果 `[目前數值] > [最大值]`:將 [最大值] 設為 [目前數值]
- 說出 [最大值]
💻 參考程式碼(JavaScript 邏輯驗證):
let n = Number(askAndWait());
let max = Number(askAndWait());
for (let i = 1; i < n; i++) {
let val = Number(askAndWait());
if (val > max) max = val;
}
print(max);
⚠️ 備課與解題提醒:先用第一筆資料當作最大值的初始標準,再逐一與後續數值比較,若較大則更新。
🎯 核心觀念:同時查找最大值與最小值 | 建議變數:N、最大值、最小值、目前數值
老師進行成績統計,老師輸入每位同學的成績,請你寫一個程式找出最高分及最低分。
輸入第一行是整數 N,代表有 N 筆成績
第二行輸入 N 個數字,數字間以空白間隔
程式輸出最大值及最小值。
這樣的練習可以幫助你處理一串資料,並同時找出其中的最大值、最小值。
🧩 積木拼裝流程步驟:
- 詢問並讀取 [N]
- 詢問讀取第 1 個數字,同時將 [最大值] 與 [最小值] 設為該數字
- 使用「重複 [N - 1] 次」:
- 詢問讀取 [目前數值]
- 如果 `[目前數值] > [最大值]` 則 [最大值] = [目前數值]
- 如果 `[目前數值] < [最小值]` 則 [最小值] = [目前數值]
- 說出文字連接:`[最大值]` + `" "` + `[最小值]`
💻 參考程式碼(JavaScript 邏輯驗證):
let n = Number(askAndWait());
let first = Number(askAndWait());
let max = first, min = first;
for (let i = 1; i < n; i++) {
let val = Number(askAndWait());
if (val > max) max = val;
if (val < min) min = val;
}
print(max + " " + min);
⚠️ 備課與解題提醒:輸出時最大值與最小值中間以空白隔開,如「9 6」或「129 3」。
🎯 核心觀念:質數判定(Prime Test)、旗標變數(Flag) | 建議變數:N、i、是否為質數
質數是大於 1 且只能被 1 和自己整除的數字。
請寫一個程式,輸入一個整數 N,判斷它是否為質數。
若是質數輸出 Yes,否則輸出 No。
這題訓練你使用條件與迴圈判斷。
🧩 積木拼裝流程步驟:
- 詢問並讀取 [N]
- 如果 `N <= 1`:說出「No」
- 否則如果 `N == 2`:說出「Yes」
- 否則:
- 設變數 [是否為質數] = true
- 「計數迴圈 i 從 2 到 (N - 1)」:
* 如果 `N 除以 i 的餘數 == 0`:
[是否為質數] = false,跳出迴圈
- 如果 [是否為質數] == true 則說出「Yes」,否則說出「No」
💻 參考程式碼(JavaScript 邏輯驗證):
let n = Number(askAndWait());
if (n <= 1) {
print("No");
} else if (n === 2) {
print("Yes");
} else {
let isPrime = true;
for (let i = 2; i < n; i++) {
if (n % i === 0) {
isPrime = false;
break;
}
}
print(isPrime ? "Yes" : "No");
}
⚠️ 備課與解題提醒:注意 1 不是質數;2 是唯一的偶數質數。旗標一被整除即可設為 false。
🎯 核心觀念:窮舉因數搜尋、字串串接 | 建議變數:N、i、因數清單字串
因數是指一個整數能被另一整數「整除」時,這個「除數」就是「被除數」的因數。
0不是任何整數的因數。1是所有整數的因數。
請寫一個程式,輸入一個整數 N,請找出N所有的因數。
所有因數以空白符號間格
這題訓練你使用條件與迴圈判斷。
範例輸出 (Output):
1 2 3 4 6 12
🧩 積木拼裝流程步驟:
- 詢問並讀取 [N]
- [因數清單字串] 設為空字串 `""`
- 「計數迴圈 i 從 1 到 N 間隔 1」:
- 如果 `N 除以 i 的餘數 == 0`(代表 i 是 N 的因數):
* 如果 [因數清單字串] == "" 則設為 i
* 否則設為 `建立文字([因數清單字串], " ", i)`
- 說出 [因數清單字串]
💻 參考程式碼(JavaScript 邏輯驗證):
let n = Number(askAndWait());
let factors = [];
for (let i = 1; i <= n; i++) {
if (n % i === 0) factors.push(i);
}
print(factors.join(" "));
⚠️ 備課與解題提醒:所有因數從小到大排列,以半形空白隔開。1 和 N 本身都算因數。
🎯 核心觀念:多科成績統計、平均與及格判定 | 建議變數:科目數、目前成績、總分、平均、結果
小明參加了數學、英文、自然...等多科的段考,老師希望能快速算出總分與平均分數,並判斷是否及格。
請設計程式,輸入多科的成績,計算總分與平均。
第一行輸入共有幾科
第二行依序輸入各科成績,科成績之間以空白間隔
計算總分,平均成績以四捨五入取整數
如果平均分數大於等於 60,就輸出「及格」,否則輸出「不及格」。
這題可以訓練你如何處理多筆資料的加總、平均計算,並搭配條件判斷。
🧩 積木拼裝流程步驟:
- 詢問並讀取 [科目數]
- [總分] 設為 0
- 重複 [科目數] 次:讀取 [目前成績],[總分] += [目前成績]
- [平均] = `四捨五入([總分] / [科目數])`
- 如果 `平均 >= 60` 則 [結果] = "及格" 否則 "不及格"
- 說出:`[總分] + " " + [平均] + " " + [結果]`
💻 參考程式碼(JavaScript 邏輯驗證):
let n = Number(askAndWait());
let total = 0;
for (let i = 0; i < n; i++) {
total += Number(askAndWait());
}
let avg = Math.round(total / n);
let res = avg >= 60 ? "及格" : "不及格";
print(total + " " + avg + " " + res);
⚠️ 備課與解題提醒:格式為三欄以空格分開:總分 平均 及格/不及格。
🎯 核心觀念:清單儲存(陣列)、加權平均計算 | 建議變數:N、成績清單、加權總分、總時數、加權平均、等第、i、時數
大明綜合高中辦理考試,不同科系考試科目數量、每周上課時數不一定相同
成績計算時,以每一科成績乘以該科上課時數為加權成績,將所有科目的加權成績加總,並除以全部科目總時數,即為學生加權平均成績
請設計一個程式,輸入各科的成績、各科加權時數,程式運算後輸出加權總分、加權平均、等第。
第一行輸入N,代表該科共有N科考試成績
第二行依序輸入N筆各科成績,各科成績之間以空白間隔
第三行依序輸入N筆各科對應加權時數,各科加權時數之間以空白間隔
計算全部加權總分,加權平均成績以四捨五入取整數
如果平均分數大於等於 80,就是「A」等第,小於80大於等於70則是「B」等第,小於70大於等於60則是「C」等第,否則是「D」等第。
程式輸出加權總分、加權平均、等第。
這題可以訓練你如何處理多筆資料的加總、平均計算,並搭配條件判斷。
範例輸入 (Input):
3
80 70 90
1 2 1
🧩 積木拼裝流程步驟:
- 詢問並讀取 [N]
- 建立空清單 [成績清單]
- 「重複 N 次」:將「回答」加入 [成績清單]
- [加權總分] 設為 0,[總時數] 設為 0
- 「計數迴圈 i 從 1 到 N」:
- 詢問並讀取 [時數]
- [加權總分] += `[成績清單 第 i 項] * [時數]`
- [總時數] += [時數]
- [加權平均] = `四捨五入([加權總分] / [總時數])`
- 根據加權平均判定等第:>=80 為 A,>=70 為 B,>=60 為 C,否則為 D
- 說出:`[加權總分] + " " + [加權平均] + " " + [等第]`
💻 參考程式碼(JavaScript 邏輯驗證):
let n = Number(askAndWait());
let scores = [];
for (let i = 0; i < n; i++) scores.push(Number(askAndWait()));
let weightedTotal = 0;
let totalHours = 0;
for (let i = 0; i < n; i++) {
let h = Number(askAndWait());
weightedTotal += scores[i] * h;
totalHours += h;
}
let avg = Math.round(weightedTotal / totalHours);
let grade = avg >= 80 ? "A" : avg >= 70 ? "B" : avg >= 60 ? "C" : "D";
print(weightedTotal + " " + avg + " " + grade);
⚠️ 備課與解題提醒:先將第二行的 N 個成績存入清單,再一邊讀取第三行的加權時數一邊計算乘積與總時數。
🎯 核心觀念:字串遍歷、特定字元計數 | 建議變數:字串、目標字元、出現次數、i
請設計程式,輸入一個字串,並輸入一個英文字母輸出該字母在字串中出現的次數。
這樣的練習可以訓練你操作字串與統計。
🧩 積木拼裝流程步驟:
- 詢問並讀取 [字串],詢問並讀取 [目標字元]
- [出現次數] 設為 0
- 「計數迴圈 i 從 1 到 [字串長度]」:
- 如果 `[字串的第 i 個字元] == [目標字元]`:
* [出現次數] += 1
- 說出 [出現次數]
💻 參考程式碼(JavaScript 邏輯驗證):
let str = askAndWait();
let target = askAndWait();
let count = 0;
for (let i = 0; i < str.length; i++) {
if (str[i] === target) count++;
}
print(count);
⚠️ 備課與解題提醒:使用【文字】類別的「在文字中取得第 i 個字元」與「字串長度」積木。
🎯 核心觀念:雙重迴圈字串頻率統計、最大頻率求解 | 建議變數:字串、最大次數、i、目前字元、計數、j
請設計程式,輸入一字串由小寫英文字母組合,長度1~50間的字串
程式會統計該字串的字母中,出現最多的次數。
這樣的練習可以訓練你循環計數迴圈與字串統計。
🧩 積木拼裝流程步驟:
- 詢問並讀取 [字串]
- [最大次數] 設為 0
- 「外層迴圈 i 從 1 到 [字串長度]」:
- [目前字元] = 字串第 i 個字
- [計數] = 0
- 「內層迴圈 j 從 1 到 [字串長度]」:
* 如果 `字串第 j 個字 == 目前字元` 則 [計數] += 1
- 如果 `[計數] > [最大次數]` 則 [最大次數] = [計數]
- 說出 [最大次數]
💻 參考程式碼(JavaScript 邏輯驗證):
let str = askAndWait();
let maxCount = 0;
for (let i = 0; i < str.length; i++) {
let c = str[i];
let count = 0;
for (let j = 0; j < str.length; j++) {
if (str[j] === c) count++;
}
if (count > maxCount) maxCount = count;
}
print(maxCount);
⚠️ 備課與解題提醒:透過雙層計數迴圈檢查字串中每個字母的出現次數,並記錄歷史最大值。
🎯 核心觀念:凱薩密碼(固定位移+2)、密碼環查表 | 建議變數:原始字串、密碼環、轉換結果、i、目前字元、目前位置、新位置
小明設計了一種簡單的密碼環密碼規則:將每個字母向後移二個字母(z 變 b)。
密碼環:abcdefghijklmnopqrstuvwxyz
請寫一個程式,輸入一個英文單字,輸出轉換後的字串。
這樣的練習訓練你字元處理與條件轉換。
🧩 積木拼裝流程步驟:
- 變數 [密碼環] 設為 `"abcdefghijklmnopqrstuvwxyz"`
- 詢問並讀取 [原始字串]
- [轉換結果] 設為 `""`
- 「計數迴圈 i 從 1 到 [原始字串長度]」:
- [目前字元] = 原始字串第 i 個字
- [目前位置] = 密碼環中找 [目前字元] 的位置
- [新位置] = [目前位置] + 2
- 如果 `[新位置] > 26` 則 `[新位置] = [新位置] - 26`
- [轉換結果] = `建立文字([轉換結果], [密碼環第 新位置 個字])`
- 說出 [轉換結果]
💻 參考程式碼(JavaScript 邏輯驗證):
let ring = "abcdefghijklmnopqrstuvwxyz";
let str = askAndWait();
let res = "";
for (let i = 0; i < str.length; i++) {
let pos = ring.indexOf(str[i]);
let newPos = (pos + 2) % 26;
res += ring[newPos];
}
print(res);
⚠️ 備課與解題提醒:若超過字母 z (第 26 位),減 26 即可繞回開頭(如 y->a, z->b)。
🎯 核心觀念:動態密碼轉換(英數混合長度36、逆向位移) | 建議變數:N、原始字串、密碼環、轉換結果、i、目前字元、目前位置、新位置
小明設計了一種英文字元密碼環編碼規則:
密碼環為『abcdefghijklmnopqrstuvwxyz0123456789』
第一行輸入數字N(N介於0~36),N為編碼位移值
編碼時,待編碼字串每個字元都按照密碼環『往前』移動N個位置
如果轉換後密碼往前超過密碼環第一個字元a,則接續最後面9繼續接回密碼環
請寫一個程式,輸入一個英文單字,程式輸出依照編碼規則轉換後的密碼字串。
這樣的練習訓練你字元處理與條件轉換。
🧩 積木拼裝流程步驟:
- 變數 [密碼環] 設為 `"abcdefghijklmnopqrstuvwxyz0123456789"`(長度 36)
- 詢問並讀取 [N](位移量),詢問並讀取 [原始字串]
- [轉換結果] 設為 `""`
- 「計數迴圈 i 從 1 到 [原始字串長度]」:
- [目前字元] = 原始字串第 i 個字
- [目前位置] = 密碼環中找 [目前字元] 的位置(1~36)
- [新位置] = [目前位置] - [N](因為是「往前」移動)
- 如果 `[新位置] <= 0` 則 `[新位置] = [新位置] + 36`
- [轉換結果] = `建立文字([轉換結果], [密碼環第 新位置 個字])`
- 說出 [轉換結果]
💻 參考程式碼(JavaScript 邏輯驗證):
let n = Number(askAndWait());
let str = askAndWait();
let ring = "abcdefghijklmnopqrstuvwxyz0123456789";
let res = "";
for (let i = 0; i < str.length; i++) {
let pos = ring.indexOf(str[i]); // 0-based
let newPos = (pos - n) % 36;
if (newPos < 0) newPos += 36;
res += ring[newPos];
}
print(res);
⚠️ 備課與解題提醒:注意題目是「往前移動 N 位」,若小於等於 0 則加上 36 繞回尾端(9)。
🎯 核心觀念:二數公因數、最大公因數(GCD) | 建議變數:第一個數、第二個數、較小值、最大公因數、i
小明上學時,不太會找最大公因數,請寫個程式幫他找一下
輸入二個整數,請計算這二個數字的最大公因數
🧩 積木拼裝流程步驟:
- 詢問並讀取 [第一個數] 與 [第二個數]
- 求 [較小值]:如果 第一個數 < 第二個數 則 較小值=第一個數,否則 較小值=第二個數
- [最大公因數] 設為 1
- 「計數迴圈 i 從 1 到 較小值」:
- 如果 `(第一個數 % i == 0) 且 (第二個數 % i == 0)`:
* [最大公因數] = i
- 說出 [最大公因數]
💻 參考程式碼(JavaScript 邏輯驗證):
let a = Number(askAndWait());
let b = Number(askAndWait());
let limit = Math.min(a, b);
let gcd = 1;
for (let i = 1; i <= limit; i++) {
if (a % i === 0 && b % i === 0) gcd = i;
}
print(gcd);
⚠️ 備課與解題提醒:從 1 巡覽到較小值,找到最後一個能同時整除兩者的 i 就是最大公因數。
🎯 核心觀念:多元數組最大公因數(連續輾轉累積求 GCD) | 建議變數:N、目前GCD、目前數值、較小值、i、j、暫存GCD
小明上學時,不太會找最大公因數,請寫個程式幫他找一下
輸入一組整數,請計算這些數字的最大公因數
輸入格式:輸入2行
第一行輸入1個整數N,代表接下來要計算最大公因數的個數
第二行輸入N個整數,用空格隔開,代表要計算最大公因數的N個整數
🧩 積木拼裝流程步驟:
- 詢問並讀取 [N]
- 詢問並讀取第 1 個數,設為 [目前GCD]
- 「重複 [N - 1] 次」:
- 詢問並讀取 [目前數值]
- 計算 [目前GCD] 與 [目前數值] 的公因數:
* [較小值] = min([目前GCD], [目前數值])
* [暫存GCD] = 1
* 「計數迴圈 j 從 1 到 較小值」:
如果 `(目前GCD % j == 0) 且 (目前數值 % j == 0)` 則 [暫存GCD] = j
* [目前GCD] = [暫存GCD]
- 說出 [目前GCD]
💻 參考程式碼(JavaScript 邏輯驗證):
let n = Number(askAndWait());
let gcd = Number(askAndWait());
for (let i = 1; i < n; i++) {
let val = Number(askAndWait());
let limit = Math.min(gcd, val);
let cur = 1;
for (let j = 1; j <= limit; j++) {
if (gcd % j === 0 && val % j === 0) cur = j;
}
gcd = cur;
}
print(gcd);
⚠️ 備課與解題提醒:多個數的最大公因數等於兩兩連續求最大公因數:gcd(a, b, c) = gcd(gcd(a, b), c)。
【CPB00】程式競賽基礎題組(循環計數迴圈)
等差間隔、倒數計時、平方數列、雙向序列、清單遍歷、裝備篩選(共 18 題)
🎯 核心觀念:從 1 到 N 的正向計數數列 | 建議變數:N、i、輸出
小小勇者在開始冒險前,必須先鍛鍊體力。教練要求勇者必須繞著操場跑N圈。
勇者一邊跑,必須一邊大聲數出目前是第幾圈,直到跑完為止。
🧩 積木拼裝流程步驟:
- 讀取 [N]
- 變數 [輸出] 設為 `""`
- 「計數迴圈 i 從 1 到 N 間隔 1」:
- 如果 `i == 1` 則 [輸出] = i 否則 [輸出] = `建立文字([輸出], " ", i)`
- 說出 [輸出]
💻 參考程式碼(JavaScript 邏輯驗證):
let n = Number(prompt() || askAndWait());
let arr = [];
for (let i = 1; i <= n; i++) arr.push(i);
print(arr.join(" "));
⚠️ 備課與解題提醒:基礎迴圈題,題目要求輸出 1 到 N 的連續整數,數字以空白隔開。
🎯 核心觀念:等差數列、自訂步長(Step = 2) | 建議變數:N、i、輸出
勇者來到了一條充滿鱷魚的河流,河面上有一排標有號碼的石頭(1, 2, 3, 4...)。為了安全,勇者決定施展「輕功」,從第 1 塊石頭開始,每次跳躍都跳過 1 個石頭(也就是每次號碼 +2),直到超過或剛好到達指定的目標號碼 N 為止。請印出勇者踩到的所有石頭號碼。
🧩 積木拼裝流程步驟:
- 讀取 [N]
- [輸出] 設為 `""`
- 「計數迴圈 i 從 1 到 N 間隔 2」:
- 如果 `i == 1` 則 [輸出] = i 否則 [輸出] = `建立文字([輸出], " ", i)`
- 說出 [輸出]
💻 參考程式碼(JavaScript 邏輯驗證):
let n = Number(prompt() || askAndWait());
let arr = [];
for (let i = 1; i <= n; i += 2) arr.push(i);
print(arr.join(" "));
⚠️ 備課與解題提醒:起點為 1,間隔設為 2,迴圈條件為不超過 N。
🎯 核心觀念:逆向遞減迴圈(Step = -1) | 建議變數:S、i、輸出
勇者要搭乘火箭前往太空站。火箭發射控制中心需要一個倒數計時器。請你設計一個程式,輸入開始倒數的秒數 S,程式會從 S 開始倒數,每次減少 1,直到數到 0 為止。
範例輸出 (Output):
5 4 3 2 1 0
🧩 積木拼裝流程步驟:
- 讀取 [S]
- [輸出] 設為 `""`
- 「計數迴圈 i 從 S 到 0 間隔 -1」:
- 如果 `i == S` 則 [輸出] = i 否則 [輸出] = `建立文字([輸出], " ", i)`
- 說出 [輸出]
💻 參考程式碼(JavaScript 邏輯驗證):
let s = Number(prompt() || askAndWait());
let arr = [];
for (let i = s; i >= 0; i--) arr.push(i);
print(arr.join(" "));
⚠️ 備課與解題提醒:從 S 倒數到 0(包含 0),間隔設為 -1。
🎯 核心觀念:迴圈變數運算與映射(i * 10) | 建議變數:N、i、輸出
勇者學會了「倍增術」。這個魔法的規則是:當勇者唸出數字 i 時,魔法袋裡就會變出 i * 10 枚金幣。勇者決定從 1 開始唸,連續唸到 N。請計算勇者每次唸完數字後,分別得到了多少金幣?
範例輸出 (Output):
10 20 30 40 50
🧩 積木拼裝流程步驟:
- 讀取 [N]
- [輸出] 設為 `""`
- 「計數迴圈 i 從 1 到 N 間隔 1」:
- [值] = `i * 10`
- 如果 `i == 1` 則 [輸出] = 值 否則 [輸出] = `建立文字([輸出], " ", 值)`
- 說出 [輸出]
💻 參考程式碼(JavaScript 邏輯驗證):
let n = Number(prompt() || askAndWait());
let arr = [];
for (let i = 1; i <= n; i++) arr.push(i * 10);
print(arr.join(" "));
⚠️ 備課與解題提醒:迴圈內使用控制變數 i 乘以 10 進行數列輸出。
🎯 核心觀念:平方數列運算(i * i) | 建議變數:N、i、輸出
為了抵禦怪獸,勇者需要建造正方形的防禦陣型。國王要求勇者展示不同規模的陣型人數。
當邊長為 i 時,需要的人數就是 i * i。
請輸入一個數字 N,依序列出邊長從 1 到 N 的正方形陣型各需要多少人。
🧩 積木拼裝流程步驟:
- 讀取 [N]
- [輸出] 設為 `""`
- 「計數迴圈 i 從 1 到 N 間隔 1」:
- [值] = `i * i`
- 如果 `i == 1` 則 [輸出] = 值 否則 [輸出] = `建立文字([輸出], " ", 值)`
- 說出 [輸出]
💻 參考程式碼(JavaScript 邏輯驗證):
let n = Number(prompt() || askAndWait());
let arr = [];
for (let i = 1; i <= n; i++) arr.push(i * i);
print(arr.join(" "));
⚠️ 備課與解題提醒:輸出 1 到 N 的平方數,如 1 4 9 16 25。
🎯 核心觀念:連續整數累加(1 + 2 + ... + N) | 建議變數:N、總額、i
勇者想買一把傳說之劍。他決定實施一個存錢計畫:第 1 天存 1 元,第 2 天存 2 元,第 3 天存 3 元...以此類推,第 i 天就存 i 元。
請問在第 N 天結束後,勇者總共存了多少錢?
🧩 積木拼裝流程步驟:
- 讀取 [N]
- [總額] 設為 0
- 「計數迴圈 i 從 1 到 N 間隔 1」:
- [總額] = `[總額] + i`
- 說出 [總額]
💻 參考程式碼(JavaScript 邏輯驗證):
let n = Number(prompt() || askAndWait());
let sum = 0;
for (let i = 1; i <= n; i++) sum += i;
print(sum);
⚠️ 備課與解題提醒:使用累加器變數,每次將迴圈變數 i 累計入總額。
🎯 核心觀念:條件累加 / 步長累加(偶數累加) | 建議變數:N、總和、i
勇者改變了存錢計畫,他決定「只在偶數日存錢」。
在第 2 天存 2 元,第 4 天存 4 元,第 6 天存 6 元...以此類推。奇數天(1, 3, 5...)則不存錢。
請問到了第 N 天結束(N>1),勇者總共存了多少錢?
🧩 積木拼裝流程步驟:
- 讀取 [N]
- [總和] 設為 0
- 「計數迴圈 i 從 2 到 N 間隔 2」:
- [總和] = `[總和] + i`
- 說出 [總和]
💻 參考程式碼(JavaScript 邏輯驗證):
let n = Number(prompt() || askAndWait());
let sum = 0;
for (let i = 2; i <= n; i += 2) sum += i;
print(sum);
⚠️ 備課與解題提醒:起點設為 2,間隔設為 2,直接累加所有小於等於 N 的偶數即可。
🎯 核心觀念:階乘累乘(1 * 2 * ... * N) | 建議變數:N、能量、i
勇者正在合成一顆能量水晶。這顆水晶的能量是不斷相乘的!
第 1 階段能量為 1。
第 2 階段能量變成 1 * 2。
第 3 階段能量變成 1 * 2 * 3。
請問到了第 N 階段,能量總共有多少?
🧩 積木拼裝流程步驟:
- 讀取 [N]
- [能量] 設為 1
- 「計數迴圈 i 從 1 到 N 間隔 1」:
- [能量] = `[能量] * i`
- 說出 [能量]
💻 參考程式碼(JavaScript 邏輯驗證):
let n = Number(prompt() || askAndWait());
let prod = 1;
for (let i = 1; i <= n; i++) prod *= i;
print(prod);
⚠️ 備課與解題提醒:變數初值必須設為 1。
🎯 核心觀念:雙向序列拼接(上山 1~N,下山 N-1~1) | 建議變數:N、i、輸出
這是一題大魔王關卡!勇者要爬一座高山,然後再下山。
這座山的高度是 N。勇者必須從 1 爬到 N,到達山頂後,再從 N-1 走回 1。
請依序列出勇者經過的高度。。
範例輸出 (Output):
1 2 3 4 5 4 3 2 1
🧩 積木拼裝流程步驟:
- 讀取 [N]
- [輸出] 設為 `""`
- 【上山迴圈】計數 i 從 1 到 N 間隔 1:
- 如果 `i == 1` 則 [輸出] = i 否則 [輸出] = `建立文字([輸出], " ", i)`
- 【下山迴圈】計數 i 從 N - 1 到 1 間隔 -1:
- [輸出] = `建立文字([輸出], " ", i)`
- 說出 [輸出]
💻 參考程式碼(JavaScript 邏輯驗證):
let n = Number(prompt() || askAndWait());
let arr = [];
for (let i = 1; i <= n; i++) arr.push(i);
for (let i = n - 1; i >= 1; i--) arr.push(i);
print(arr.join(" "));
⚠️ 備課與解題提醒:山頂 N 只能出現一次,下山時起點是 N - 1,終點是 1。
🎯 核心觀念:清單逐項讀取與輸出 | 建議變數:N、輸出、數字
1. 題目說明
勇者準備出發了,他把所有的道具都放入了神奇背包(清單)中。 為了確認東西沒帶錯,勇者需要依照順序把背包裡的東西拿出來檢查一遍。 請你設計一個程式,將清單中的物品編號依序印出來。
範例輸入 (Input):
3
101 102 103
範例輸出 (Output):
101 102 103
🧩 積木拼裝流程步驟:
- 讀取 [N]
- [輸出] 設為 `""`
- 「重複 N 次」:
- 讀取 [數字]
- 如果 [輸出] == "" 則 [輸出] = [數字] 否則 [輸出] = `建立文字([輸出], " ", [數字])`
- 說出 [輸出]
💻 參考程式碼(JavaScript 邏輯驗證):
let n = Number(askAndWait());
let arr = [];
for (let i = 0; i < n; i++) arr.push(askAndWait());
print(arr.join(" "));
⚠️ 備課與解題提醒:依序讀取第二行的 N 個整數並以空格連接輸出。
🎯 核心觀念:自訂起點、終點與間隔的三參數迴圈 | 建議變數:M、N、O、i、輸出
勇者發現了一個萬能傳送門。這個傳送門可以讓勇者自由設定「起點」、「終點」以及每次傳送的「跨度(距離)」。 請設計一個程式,讀取三個數字,分別代表:起點 (Start)、終點 (End)、跨度 (Step)。 請依序印出傳送過程中經過的所有座標點。
範例輸出 (Output):
2 4 6 8 10
🧩 積木拼裝流程步驟:
- 依序讀取 [M](起點)、[N](終點)、[O](跨度)
- [輸出] 設為 `""`
- 「計數迴圈 i 從 M 到 N 間隔 O」:
- 如果 [輸出] == "" 則 [輸出] = i 否則 [輸出] = `建立文字([輸出], " ", i)`
- 說出 [輸出]
💻 參考程式碼(JavaScript 邏輯驗證):
let m = Number(askAndWait());
let n = Number(askAndWait());
let o = Number(askAndWait());
let arr = [];
for (let i = m; i <= n; i += o) arr.push(i);
print(arr.join(" "));
⚠️ 備課與解題提醒:利用 controls_for 設定 FROM = M, TO = N, BY = O。
🎯 核心觀念:倍數查找與間隔跳躍 | 建議變數:M、N、i、輸出
勇者來到了一條長長的藏寶走廊,走廊上的地磚編號從 1 到 N。藏寶圖上寫著:「只有編號是 $K$ 的倍數的地磚下藏有寶箱。」
請你幫助勇者找出所有藏有寶箱的地磚編號。
🧩 積木拼裝流程步驟:
- 讀取 [M](總數上限)、[N](倍數)
- [輸出] 設為 `""`
- 「計數迴圈 i 從 N 到 M 間隔 N」:
- 如果 [輸出] == "" 則 [輸出] = i 否則 [輸出] = `建立文字([輸出], " ", i)`
- 說出 [輸出]
💻 參考程式碼(JavaScript 邏輯驗證):
let m = Number(askAndWait());
let n = Number(askAndWait());
let arr = [];
for (let i = n; i <= m; i += n) arr.push(i);
print(arr.join(" "));
⚠️ 備課與解題提醒:找 N 的倍數最聰明的方法是讓迴圈從 N 開始,每次增加 N,直到超過 M 為止。
🎯 核心觀念:區間累加(M 加到 N) | 建議變數:M、N、總和、i
勇者需要修復一座斷掉的橋。橋的每一段需要的木材數量等於該段的編號。
現在只需修復從編號M到編號N的這一段區間。
請計算修復這段區間總共需要多少木材?(即計算M+(M+1)+...+N的總和)。
🧩 積木拼裝流程步驟:
- 讀取 [M] 與 [N]
- [總和] 設為 0
- 「計數迴圈 i 從 M 到 N 間隔 1」:
- [總和] = `[總和] + i`
- 說出 [總和]
💻 參考程式碼(JavaScript 邏輯驗證):
let m = Number(askAndWait());
let n = Number(askAndWait());
let sum = 0;
for (let i = m; i <= n; i++) sum += i;
print(sum);
⚠️ 備課與解題提醒:從起點 M 累加到終點 N。若 M === N,則總和即為 M。
🎯 核心觀念:清單數值總和累加 | 建議變數:N、總金幣、金幣
1. 題目說明
勇者打敗了一群史萊姆,每隻史萊姆身上掉落的金幣數量都不一樣。 助手已經把每隻史萊姆掉落的金幣數量記在清單上了。 請你幫勇者算算看,這次戰鬥總共獲得了多少金幣?
🧩 積木拼裝流程步驟:
- 讀取 [N]
- [總金幣] 設為 0
- 「重複 N 次」:
- 讀取 [金幣]
- [總金幣] = `[總金幣] + [金幣]`
- 說出 [總金幣]
💻 參考程式碼(JavaScript 邏輯驗證):
let n = Number(askAndWait());
let sum = 0;
for (let i = 0; i < n; i++) sum += Number(askAndWait());
print(sum);
⚠️ 備課與解題提醒:清單元素求總和標準題。
🎯 核心觀念:清單搜尋最大值 | 建議變數:N、最大戰鬥力、戰鬥力
1. 題目說明
偵查兵帶回了一份情報,上面記錄了前方 N 隻怪物的戰鬥力數值。
勇者想要先挑戰最強的那一隻!
請你找出這份清單中,數值最大的那個數字是多少。
🧩 積木拼裝流程步驟:
- 讀取 [N]
- 讀取第 1 隻怪物的數值,[最大戰鬥力] 設為該數值
- 「重複 N - 1 次」:
- 讀取 [戰鬥力]
- 如果 `[戰鬥力] > [最大戰鬥力]` 則 `[最大戰鬥力] = [戰鬥力]`
- 說出 [最大戰鬥力]
💻 參考程式碼(JavaScript 邏輯驗證):
let n = Number(askAndWait());
let max = Number(askAndWait());
for (let i = 1; i < n; i++) {
let val = Number(askAndWait());
if (val > max) max = val;
}
print(max);
⚠️ 備課與解題提醒:以第一筆數值為基準,後續數值大於它就更新。
🎯 核心觀念:陣列清單儲存與反向遍歷(逆序輸出) | 建議變數:N、密碼清單、輸出、i
1. 題目說明
勇者獲得了一個「時光倒流」的魔法卷軸。這個卷軸上有一串數字密碼,但是必須從最後一個數字讀回到第一個數字,魔法才能生效。 請讀取一個清單,並將清單內的數字「由後往前」印出來。
範例輸入 (Input):
4
10 20 30 40
範例輸出 (Output):
40 30 20 10
🧩 積木拼裝流程步驟:
- 讀取 [N]
- 建立空清單 [密碼清單]
- 「重複 N 次」:將「回答」加入 [密碼清單]
- [輸出] 設為 `""`
- 「計數迴圈 i 從 N 到 1 間隔 -1」:
- [值] = `密碼清單 第 i 項`
- 如果 [輸出] == "" 則 [輸出] = 值 否則 [輸出] = `建立文字([輸出], " ", 值)`
- 說出 [輸出]
💻 參考程式碼(JavaScript 邏輯驗證):
let n = Number(askAndWait());
let list = [];
for (let i = 0; i < n; i++) list.push(askAndWait());
print(list.reverse().join(" "));
⚠️ 備課與解題提醒:先將輸入存入清單,再從索引 N 倒數回 1 取出,或直接將陣列反轉。
🎯 核心觀念:索引與數值對齊、格式化字串建置 | 建議變數:N、輸出、i、數量
1. 題目說明
勇者寫了 N 天的冒險日誌,清單中依序記錄了每天打倒的怪物數量。
例如清單的第一個數字是第 1 天打倒的數量,第二個數字是第 2 天的...
請你格式化輸出每天的戰績,格式為:Day-[第幾天]-[數量]。
範例輸出 (Output):
Day-1-15 Day-2-5
🧩 積木拼裝流程步驟:
- 讀取 [N]
- [輸出] 設為 `""`
- 「計數迴圈 i 從 1 到 N 間隔 1」:
- 讀取 [數量]
- [項目文字] = `建立文字("Day-", i, "-", [數量])`
- 如果 [輸出] == "" 則 [輸出] = 項目文字 否則 [輸出] = `建立文字([輸出], " ", 項目文字)`
- 說出 [輸出]
💻 參考程式碼(JavaScript 邏輯驗證):
let n = Number(askAndWait());
let arr = [];
for (let i = 1; i <= n; i++) {
let val = askAndWait();
arr.push("Day-" + i + "-" + val);
}
print(arr.join(" "));
⚠️ 備課與解題提醒:注意輸出格式嚴格為 `Day-天數-數量`,各天之間以半形空格分隔。
🎯 核心觀念:條件篩選輸出(過濾小於 10 的元素) | 建議變數:N、輸出、重量
1. 題目說明
勇者的負重能力有限,他只能攜帶重量「小於 10」的輕型裝備。 現在清單中有一堆裝備的重量,請你利用迴圈檢查每一個裝備,只把重量小於 10 的裝備重量印出來。
範例輸入 (Input):
5
15 5 20 8 3
🧩 積木拼裝流程步驟:
- 讀取 [N]
- [輸出] 設為 `""`
- 「重複 N 次」:
- 讀取 [重量]
- 如果 `[重量] < 10`:
* 如果 [輸出] == "" 則 [輸出] = 重量 否則 [輸出] = `建立文字([輸出], " ", 重量)`
- 說出 [輸出]
💻 參考程式碼(JavaScript 邏輯驗證):
let n = Number(askAndWait());
let arr = [];
for (let i = 0; i < n; i++) {
let val = Number(askAndWait());
if (val < 10) arr.push(val);
}
print(arr.join(" "));
⚠️ 備課與解題提醒:如果沒有任何小於 10 的裝備,輸出必須為空字串(什麼都不印出)。