一道简单的洗牌题

这个我面试时的一题:

一副牌有54张去掉大小王,剩下的52张牌按花色平均分成两份,每份26张,假如洗牌时每份一张的交叉。如:

初始:
A红 2红 3红 4红 5红 6红 7红 8红 9红 10红 J红 Q红 K红
A黑 2黑 3黑 4黑 5黑 6黑 7黑 8黑 9黑 10黑 J黑 Q黑 K黑
A梅 2梅 3梅 4梅 5梅 6梅 7梅 8梅 9梅 10梅 J梅 Q梅 K梅
A方 2方 3方 4方 5方 6方 7方 8方 9方 10方 J方 Q方 K方
洗一轮后:
A红  A梅  2  2梅  3红  3梅  4红  4梅  5红  5梅  6红  6梅  7红 
7梅  8红  8梅  9红  9梅  10红  10梅  J红  J梅  Q红  Q梅  K红  K梅
A黑  A方  2黑  2  3黑  3方  4黑  4方  5黑  5方  6黑  6方  7黑 
7方  8黑  8方  9黑  9方  10黑  10方  J黑  J方  Q黑  Q方  K黑  K方

问:

(1)2红与2方在洗一轮后所在位置为3和30,第三轮时它们分别在什么位置。

(2)当洗N轮后牌会回到初始状态,请问N是都少。

答:(1)分别在9和15。

(2)8

代码如下:

public class test {
public static String[] insertSort(String[] args) {
for(int i=0;i<args.length/2;i++){
for (int j = 26+i; j > 2*i+1; j--) {
String temp = args[j];
args[j] = args[j-1];
args[j-1] = temp;
}
}
return args;
     }
public static void main(String[] args) {
String[] argStrings={
 "A红","2红","3红","4红","5红","6红","7红","8红","9红","10红","J红","Q红","K红",
 "A黑","2黑","3黑","4黑","5黑","6黑","7黑","8黑","9黑","10黑","J黑","Q黑","K黑",
 "A梅","2梅","3梅","4梅","5梅","6梅","7梅","8梅","9梅","10梅","J梅","Q梅","K梅",
 "A方","2方","3方","4方","5方","6方","7方","8方","9方","10方 ","J方 ","Q方","K方"
};
for (int i = 0; i <1; i++) {
String[] string1 = insertSort(argStrings);
String[] string =null;
System.out.print("请输入洗牌的轮数:");
int num;
num = new Scanner(System.in).nextInt();
if(num<=0){
System.out.println("输入的次数不对,请从新输入");
num=new Scanner(System.in).nextInt();
}
if(num==1){
string=string1;
}else {
for (int j = 0; j < num-1; j++) {
string = insertSort(string1);
}
}
//按每行13张牌进行输出
for (int j = 0; j < string.length; j++) {
if (j==13) {
System.out.println();
System.out.print(string[j]);
} else if(j==26){
System.out.println();
System.out.print(string[j]);
}else if(j==39){
System.out.println();
System.out.print(string[j]);
}else {
System.out.print(string[j]);
}
}
}
}
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值