java模拟洗牌_Java洗牌

输入第一行表示组数,

第二行输入N,K

每一组2*N+1张牌,操作K次,输出序列按照从上到下。

操作含义:把一组牌分为两等分,左手一份右手一份,右手先出最后一张牌,左手再出最后一张牌,一次循坏,直到出完牌。

输出需注意:行末数据不能留空格,所以需要和前面数据分开打印。

知识点:用到list来调换数组中元素顺序并暂存,最后在挪到原数组中。

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

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

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 list=new ArrayList<>();//借助list完成数组中元素顺序。再放回原数组中

for(int i=0;i

list.add(arr[i]);

list.add(arr[i+n/2]);

}//一次后的从上到下

for(int i=0;i

arr[i]=list.get(i);//list中值移到原数组arr中

}

}

}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值