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 程式,計算陣列中指定索引範圍內的元素總和。程式邏輯如下:

  1. 使用者首先輸入一個大於零的整數 n,代表陣列的大小。

  2. 接著輸入 n 個整數,依序存入陣列中。

  3. 最後輸入兩個大於零且小於 n 的整數,分別代表起始索引 start 與終止索引 end。

  4. 若 start 的值大於 end,程式必須先交換這兩個變數的值。

  5. 計算並輸出陣列中從索引 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(...) {
        ...
    }
}

輸入值的格式

  1. 第一行包含一個正整數 n (n > 1)。

  2. 第二行包含 n 個整數,彼此以空格分隔,代表陣列內容。

  3. 第三行包含兩個整數 start 與 end (0 < start, end < n),彼此以空格分隔。

輸出值的格式

輸出一行整數,代表指定範圍內的元素加總結果。

各種需要注意的邊界條件

  1. 順序檢查:必須處理 start > end 的情況,並進行交換。

  2. 包含端點:加總範圍必須包含 start 索引與 end 索引所指向的數值。

  3. 索引限制:題目規定 start 與 end 均大於零,因此索引 0 的元素在任何情況下都不會被納入加總範圍。

  4. 單一元素:若交換後 (或原本就) start 等於 end,加總結果應僅為該單一索引的數值。

  5. 極大與極小值:陣列中的元素可能為負數,計算時需保留正負號特性。

測試資料(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

There are no comments at the moment.