Array Range Sum with Index Swap
Submit solution
Points:
10
Time limit:
1.0s
Memory limit:
64M
Authors:
Problem type
Allowed languages
Java 19, Java 8
題目說明
本題目要求撰寫一個 Java 程式,計算陣列中指定索引範圍內的元素總和。程式邏輯如下:
使用者首先輸入一個大於零的整數 n,代表陣列的大小。
接著輸入 n 個整數,依序存入陣列中。
最後輸入兩個大於零且小於 n 的整數,分別代表起始索引 start 與終止索引 end。
若 start 的值大於 end,程式必須先交換這兩個變數的值。
計算並輸出陣列中從索引 start 到索引 end (包含這兩個位置) 的所有元素加總結果。
本題目已提供主程式樣板,你只需要實作核心函數 calculateRangeSum。請勿修改主程式的其他部分,否則不予計分。
樣板程式碼:
import java.util.Scanner;
public class ArraySumApp {
public static void main(String[] args) {
Scanner scanner = new Scanner(System.in);
// 1. 讀取陣列大小與元素
int n = scanner.nextInt();
int[] numbers = new int[n];
for (int i = 0; i < n; i++) {
numbers[i] = scanner.nextInt();
}
// 2. 讀取起始與終止索引
int start = scanner.nextInt();
int end = scanner.nextInt();
// 3. 呼叫自定義函數並輸出結果
int result = calculateRangeSum(...);
System.out.println(result);
scanner.close();
}
/**
* 自定義函數:計算陣列中指定索引範圍內的元素總和
* 包含 start 與 end 位置
*/
public static int calculateRangeSum(...) {
...
}
}
輸入值的格式
第一行包含一個正整數 n (n > 1)。
第二行包含 n 個整數,彼此以空格分隔,代表陣列內容。
第三行包含兩個整數 start 與 end (0 < start, end < n),彼此以空格分隔。
輸出值的格式
輸出一行整數,代表指定範圍內的元素加總結果。
各種需要注意的邊界條件
順序檢查:必須處理 start > end 的情況,並進行交換。
包含端點:加總範圍必須包含 start 索引與 end 索引所指向的數值。
索引限制:題目規定 start 與 end 均大於零,因此索引 0 的元素在任何情況下都不會被納入加總範圍。
單一元素:若交換後 (或原本就) start 等於 end,加總結果應僅為該單一索引的數值。
極大與極小值:陣列中的元素可能為負數,計算時需保留正負號特性。
測試資料(1)-輸入
5
10 20 30 40 50
3 1
測試資料(1)-輸出
90
測試資料(1)-解釋與特性
特性:典型交換案例。輸入 start=3, end=1,因 3 > 1 須交換。範圍變為索引 1 到 3。加總 20 + 30 + 40 = 90。
測試資料(2)-輸入
6 1 2 3 4 5 6
4 2
測試資料(2)-輸出
12
Comments