Ring Array Rotation
Submit solution
Points:
10 (partial)
Time limit:
1.0s
Memory limit:
64M
Authors:
Problem type
Allowed languages
Java 19, Java 8
這個程式允許使用者輸入一個整數size表示陣列大小,並輸入第二個整數rotations表示陣列要"旋轉"幾次,接著輸入符合陣列大小size的數字。
輸入完成之後,程式會依照指定的rotations數字對陣列進行向右或是向左旋轉。如果旋轉次數超過陣列大小,則考慮旋轉次數除以陣列大小的餘數。 更詳細的說明請看以下輸出入範例以及程式碼內部註解。
這個程式目前仍缺少RingArray類別的實作,請完成它,並且上傳完整的程式。 除了RingArray類別之外,請勿修改其他已經寫好的部分,違反此規則者,無論自動評測結果為何,在考試中均不計分。但允許輕微的排版差異。
程式完成之後,可用以下測試資料做初步的測試,但仍請自行設計完整的測試資料
輸入 #1:
5 2 1 2 3 4 5 (5個數字,向右旋轉2格,數字清單是1 2 3 4 5)
輸出 #1:
4 5 1 2 3
輸入 #2:
5 -2 1 2 3 4 5 (5個數字,向左旋轉2格,數字清單是1 2 3 4 5)
輸出 #2:
3 4 5 1 2
輸入 #3:
5 7 1 2 3 4 5 (5個數字,向右旋轉7格,實際上相當於向右旋轉2格,數字清單是1 2 3 4 5)
輸出 #3:
4 5 1 2 3
輸入 #4:
5 -7 1 2 3 4 5 (5個數字,向左旋轉2格,實際上相當於向左旋轉2格,數字清單是1 2 3 4 5)
輸出 #4:
3 4 5 1 2
import java.util.Scanner;
// 定義RingArray類別,內部有一個私有整數陣列array
// RingArray類別建構函數的參數是整數size,表示陣列的大小,陣列中的元素都是整數,初始值為0
// RingArray類別有一個setElement方法,用於設置陣列中的元素,第一個參數是索引,第二個參數是值,沒有返回值
// RingArray類別有一個rotate方法,用於旋轉陣列,第一個參數是旋轉次數,可能是負數,沒有返回值
// 例如,如果陣列是[1, 2, 3, 4, 5],旋轉次數是2,則旋轉後的陣列是[4, 5, 1, 2, 3]
// 例如,如果陣列是[1, 2, 3, 4, 5],旋轉次數是-2,則旋轉後的陣列是[3, 4, 5, 1, 2]
// 旋轉次數可能大於陣列大小,此時旋轉次數等於旋轉次數除以陣列大小的餘數
// 例如,如果陣列是[1, 2, 3, 4, 5],旋轉次數是7,則旋轉後的陣列是[4, 5, 1, 2, 3]
// 例如,如果陣列是[1, 2, 3, 4, 5],旋轉次數是-7,則旋轉後的陣列是[3, 4, 5, 1, 2]
// RingArray類別有一個getArray方法,返回當前的整數陣列array
class RingArray {
...
}
public class RingArrayTraversal {
public static void main(String[] args) {
Scanner scanner = new Scanner(System.in);
// 讀取整數 size 和 rotations,分別表示陣列的大小和旋轉次數,其中 rotations 可能是負數
int size = scanner.nextInt();
int rotations = scanner.nextInt();
// 創建一個 RingArray 物件,大小為 size
RingArray ringArray = new RingArray(size);
// 接著讀取 size 個整數,並將它們存儲在 ringArray 物件中
for (int i = 0; i < size; i++) {
ringArray.setElement(i, scanner.nextInt());
}
// 將 ringArray 物件旋轉 rotations 次,注意 rotations 可能是負數
ringArray.rotate(rotations);
// 輸出旋轉後的陣列,每個整數之間用空格分隔
int[] array = ringArray.getArray();
for (int i = 0; i < array.length; i++) {
System.out.print(array[i] + " ");
}
}
}
Comments
題解