PAT 1042 Shuffling Machine (20 分)Java實現
阿新 • • 發佈:2018-11-25
題目連結:Shuffling Machine
1. 題意
題目意思就是按照給定的順序洗牌
比如說題目所給的五張牌樣例S3, H5, C1, D13, J2
洗牌順序是{4, 2, 5, 3, 1}
所以我們將
S3
移動到第四位H5
移動到第二位C1
移動到第五位D13
移動到第三位J2
移動到第一位
得到的新次序是J2, H5, D13, S3, C1
然後再洗一次得到的次數就是C1, H5, S3, J2, D13
2. 思路
我們不能直接的移動元素來進行變換, 我們得模擬下標的變換
使用兩個陣列記錄移動前的次序和移動後的次序
3. 程式碼
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.util.ArrayList;
public class Main {
static final int n = 54;
public static void main(String[] args) throws IOException {
char[] ch = { 'S', 'H', 'C', 'D' };
ArrayList< String> list = new ArrayList<String>();
for (int i = 0; i < 4; i++) {
for (int j = 1; j <= 13; j++) {
StringBuilder bd = new StringBuilder();
bd.append(ch[i]);
bd.append(j);
list.add(bd.toString());
}
if (i == 3) {
list.add("J1");
list.add("J2");
}
}
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
int k = Integer.parseInt(br.readLine());
String[] s = br.readLine().split(" ");
int[] num = new int[60];
for (int i = 0; i < n; i++) {
num[i] = Integer.parseInt(s[i]);
}
int[] start = new int[55];
int[] end = new int[55];
for (int i = 0; i < n; i++) {
start[i] = i;
}
for (int i = 0; i < k; i++) {
for (int j = 0; j < n; j++) {
end[num[j] - 1] = start[j];
}
for (int j = 0; j < n; j++) {
start[j] = end[j];
}
}
for (int i = 0; i < n; i++) {
if (i != 0) {
System.out.print(" ");
}
System.out.print(list.get(start[i]));
}
System.out.println();
}
}