Java洗牌

輸入第一行表示組數,
第二行輸入N,K
每一組2*N+1張牌,操做K次,輸出序列按照從上到下。
操做含義:把一組牌分爲兩等分,左手一份右手一份,右手先出最後一張牌,左手再出最後一張牌,一次循壞,直到出完牌。java

輸出需注意:行末數據不能留空格,因此須要和前面數據分開打印。數組

知識點:用到list來調換數組中元素順序並暫存,最後在挪到原數組中。ide

import java.util.ArrayList;
import java.util.Scanner;

public class WashCard {

//數的範圍本身無須作特殊處理,表示測試用例會那樣作
    public static void main(String[] args) {
        Scanner in=new Scanner(System.in);
        int T=in.nextInt();//數據組數
        for(int i=0;i<T;i++){

            int n=in.nextInt();
            int k=in.nextInt();
            int[] arr=new int[2*n];

        for(int j=0;j<2*n;j++){
           arr[j]=in.nextInt();
        }
        //反轉K次
            for(int times=0;times<k;times++){//操做K次
            getRes(arr,arr.length);//操做一次
        }
        for(int a=0;a<2*n-1;a++){//沒有打印最後一個數,由於最後一個數分開處理,後面不能打印空格
            System.out.print(arr[a]+" ");
        }
            System.out.println(arr[2*n-1]);
        }
    }

    public static void getRes(int[] arr,int n){
        ArrayList<Integer>  list=new ArrayList<>();//藉助list完成數組中元素順序。再放回原數組中
        for(int i=0;i<n/2;i++){
            list.add(arr[i]);
            list.add(arr[i+n/2]);

        }//一次後的從上到下
        for(int i=0;i<n;i++){
            arr[i]=list.get(i);//list中值移到原數組arr中
        }

    }
}
相關文章
相關標籤/搜索