輸入第一行表示組數,
第二行輸入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中 } } }