Array Element Transformation via Complementary Sum


Submit solution

Points: 10
Time limit: 1.0s
Memory limit: 64M

Authors:
Problem type
Allowed languages
Java 19, Java 8

題目說明

本題目要求實作一個陣列轉換程式。使用者會輸入一個正整數 n 以及 n 個整數。程式邏輯分為以下步驟:

  1. 計算這 n 個整數的總和 sum。

  2. 針對陣列中的每一個元素 x,計算其轉換值。轉換公式為 sum - x。

  3. 依序輸出轉換後的 n 個整數,每個整數後方請加上一個空格。

本題目已提供 Java 程式樣板,包含主程式 main 邏輯與輸入輸出處理。應試者僅能實作 transformArray 函數,不得修改其他既有的程式碼內容。

樣板程式碼如下:


import java.util.Scanner;

public class ArrayTransformer {

    public static void main(String[] args) {
        Scanner scanner = new Scanner(System.in);

        int n = scanner.nextInt();

        int[] numbers = new int[n];
        int sum = 0;

        for (int i = 0; i < n; i++) {
            if (scanner.hasNextInt()) {
                numbers[i] = scanner.nextInt();
                sum += numbers[i];
            }
        }

        transformArrayInPlace(numbers, sum);

        for (int i = 0; i < n; i++) {
            System.out.print(numbers[i] + " ");
        }
    }

    public static … transformArrayInPlace(...) {
        …
    }
}

輸入值的格式

第一行包含一個正整數 n。

第二行包含 n 個整數,整數之間以空格分隔。

輸出值的格式

輸出為 n 個整數,每個整數之後必須緊接一個半形空格。

各種需要注意的邊界條件

當 n=1 時,轉換後的結果應為 0,因為 sum 即為該數字本身,sum - x = 0。

輸入的整數可能包含正整數、負整數或 0。

總和 sum 可能為負數。

陣列中可能存在重複的數字。

所有計算結果與輸入數值均在 Java int 型別範圍內。

測試資料(1)-輸入

3 10 20 30

測試資料(1)-輸出

50 40 30

測試資料(1)-解釋與特性

特性:標準輸入情境。

解釋:sum = 10 + 20 + 30 = 60。轉換結果為 60-10=50, 60-20=40, 60-30=30。

測試資料(2)-輸入

1 99

測試資料(2)-輸出

0

測試資料(2)-解釋與特性

特性:最小陣列長度 n=1。

解釋:sum = 99。轉換結果為 99-99=0。


Comments

There are no comments at the moment.