1. 程式人生 > >PAT 1042 Shuffling Machine (20 分)Java實現

PAT 1042 Shuffling Machine (20 分)Java實現

題目連結: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(); } }