请从26个英文字母中随机取出24个,并随机平均分配给4个人,并将这4个人手中的牌从小到大排列。

请从26个英文字母中随机取出24个,并随机平均分配给4个人,并将这4个人手中的牌从小到大排列。

import java.util.Collections;
import java.util.LinkedList;
import java.util.List;
import java.util.Random;

public class Test {
    public static void main(String[] args) {
        // flag 为标记,只有0的可用
        int[] flag = new int[26];
        Random random = new Random();
        // 移除两个,标记为-1,其余24个0时可用的
        fill(flag, random.nextInt(26), -1);
        fill(flag, random.nextInt(25), -1);
        List<List<Character>> list = new LinkedList<>();
        System.out.println("原始数据:");
        for (int i = 24; i > 0; i -= 6) {
            List<Character> item = new LinkedList<>();
            for (int j = 0; j < 6; j++) {
                // 每个人取6个
                int p = fill(flag, random.nextInt(i - j), i / 6);
                char c = (char) (p + 'a');
                System.out.print(c + " ");
                item.add(c);
            }
            // 将6个记录下来,保存到list中
            Collections.sort(item);
            list.add(item);
            System.out.println();
        }
        // 给list排序
        // 打印list
        System.out.println("\n排序后:");
        list.forEach(System.out::println);
    }

    // 将 val 的 第 ind 个可用的0 标记为 v
    private static int fill(int[] val, int ind, int v) {
        for (int i = 0; i < val.length; i++) {
            if (val[i] != 0) {
                continue;
            }
            if (ind == 0) {
                val[i] = v;
                return i;
            }
            ind--;
        }
        return -1;
    }
}

几次测试输出:

img

img

img

可以看到是随机分配

import java.util.*;

public class TestMain {

    public static void main(String[] args) {
        int dx = 65; // 大写字母
        int xx = 97; // 小写字母
        Set<Character> zms = new HashSet();
        Random ra = new Random();
        while(true) {
            int zm = ra.nextInt(26) + xx; // ra.nextInt(26) + dx
            zms.add((char)zm);
            if (zms.size() == 24) break; // 够24个就退出
        }
        Character[] characters = zms.toArray(new Character[0]);
        List<List<Character>> persons = new ArrayList<>();
        persons.add(new ArrayList<>()); // 第一个
        persons.add(new ArrayList<>()); // 第二个
        persons.add(new ArrayList<>()); // 第三个
        persons.add(new ArrayList<>()); // 第四个
        for (int i = 0; i < characters.length; i++) {
            int index = ra.nextInt(4); // 给第index个赋值characters的i下标的值
            List<Character> person = persons.get(index);
            if (person.size() < 6) { // 是否给完
                person.add(characters[i]);
            }else {
                --i;
            }
        }
        // 查看结果
        persons.forEach(p->{
            p.forEach(e->{
                System.out.print(e + "\t");
            });
            System.out.println();
        });

    }
}

结果:

img

img


        ArrayList<Character> chs = new ArrayList<>(26);
        char a = 'a';
        for (int i = 0; i < 26; i++) {
            chs.add(a++);
        }
        Collections.shuffle(chs);
        char[][] distribute = new char[4][6];
        for (int i = 0; i < 4; i++) {
            for (int j = 0; j < 6; j++) {
                distribute[i][j] = chs.get(i * 6 + j);
            }
            Arrays.sort(distribute[i]);
        }