public class E20113 {
public static void main(String[] args) {
int[] arr = new int[52];
//先形成各种花色的牌 分为四种1,2,3,4
for(int i = 0;i < 52;i ++){
arr[i] = i / 13 + 1;
// System.out.println(arr[i]);
}
//获取打乱了的数组序列
List<Integer> list = new ArrayList();
for(int i = 0; i < 52; i ++){
list.add(i);
}
Collections.shuffle(list);
int[] buffer = new int[52];
for(int i =0 ; i < 52; i ++){
buffer[i] = arr[list.get(i)];
}
//根据目标数字寻找
int N = 1;
//前后指针
int left = 0;
int right = 1;
//分为左右指针,共分三种情况:
//1、左指针指向的值为目标值,右指针指向的值也为目标值,此时,左指针向右移动2位
//右指针在左指针基础上向右移动一位
//2、左指针指向的值为目标值,右指针指向的值不为目标值,此时,左指针向右移动1位
//右指针在左指针基础上向右移动一位
//3、左指针指向的值不为目标值,此时,右指针在原来基础上向右移动一位
//上述移动完成后,left高于左侧已经排好的序列的最高索引一位
//通过判断右指针指向的值是否为目标值,来决定是否交换二者
while (N<4){
if(left<right&&buffer[left]==N){
if(buffer[right]==N){
left+=2;
right = left + 1;
}else{
left++;
right = left + 1;
}
}else{
right++;
}
if(left<right&&buffer[right]==N){
swap(buffer,left,right);
}
if(left/13==N){
N++;
}
}
System.out.println(Arrays.toString(buffer));
}
//交换
public static void swap(int[] arr,int a,int b){
int tmp = arr[a];
arr[a] = arr[b];
arr[b] = tmp;
}
}
算法4 2.1.13
最新推荐文章于 2025-04-10 16:33:23 发布