http://e-tutor.itsa.org.tw/e-Tutor/mod/programming/view.php?id=30527
這題用模擬會溢位,所以要用數學方法解,環狀位置要用餘數運算 我們可以遵循它的規律 D會員人數 K會員代號 N換位次數 L每次移動距離 ex: 會員代號偶數時 8 3 2 1 原本位置 4 3 2 第一次換位結果 6 3 4 第二次換位結果 8 3 6 推導出 ((k+1)-(2NL))%D =>8//因為偶數逆時鐘所以減若為負數加上D
會員代號奇數時 8 4 2 1 原本位置 5 4 3 第一次換位結果 3 4 1 第二次換位結果 1 4 7 ((k+1)+(2NL))%D =>1//奇數順時鐘所以加
最後當數字為0時要變成D
import java.util.*;
public class Main {
public static void main(String[] args) {
Scanner scn = new Scanner(System.in);
int n = scn.nextInt();
while (n-- != 0) {
long D = scn.nextLong(), K = scn.nextLong(), N = scn.nextLong(), L = scn.nextLong(), a = 0, b = 0;
if (K % 2 == 1) {//會員為奇數時
a = ((K + 1) + (2 * L * N)) % D;
b = ((K - 1) + (2 * L * N)) % D;
}
else {//會員為偶數時
a = ((K + 1) - (2 * L * N)) % D;
b = ((K - 1) - (2 * L * N)) % D;
if (a < 0)
a += D;
if (b < 0)
b += D;
}
if (a == 0)
a = D;
if (b == 0)
b = D;
System.out.println(a + " " + b);
}
}
/*
題目:[Problem B11] Rotate around a circle
作者:1010
時間:西元 2016 年 8 月 */
}