【Java程序】全境征才求最大SR概率

B站【蓝火小寒冰】
QQ【694986107】
欢迎探讨编程问题

package Tkfm;

import java.util.ArrayList;

public class Qjzc {
    public static void main(String[] args) {
        /*
         * 【标签表】
         * 火 水 风 光 暗
         * 攻 守 治 妨 辅
         * 人 魔 亚
         * 小 中
         * 贫 美 巨
         * 输 保 防 回 干 支
         * 削 爆 生 越 群
         *
         * 数据来源:https://purindaisuki.github.io/tkfmtools/enlist/
         * 已内置查询功能(模式1)请自行更新数据
         *
         * 永远不选士兵
         * 选到精英必出
         */
        
        /*
         * 0:找labels给出的标签SR最高概率的组合。
         * 1:找人信息。
         */
        int mod = 0;

        String[] labels = {"火", "辅", "暗", "群", "美"};//刷出来的标签(mod为 1 时无效)

        String key = "法斯";//查询关键字(mod为 0 时无效)

        ArrayList<String> name = new ArrayList<>();
        ArrayList<Integer> level = new ArrayList<>();
        ArrayList<String[]> label = new ArrayList<>();

        name.add("魔管家 艾可");
        level.add(2);
        label.add(new String[]{"暗", "辅", "魔", "中", "美", "支"});

        name.add("圣骑士长 雷欧娜");
        level.add(2);
        label.add(new String[]{"水", "守", "人", "中", "美", "保", "防", "生"});

        name.add("神官长 菲欧拉");
        level.add(2);
        label.add(new String[]{"光", "治", "人", "中", "美", "回"});

        name.add("女忍者 凛月");
        level.add(2);
        label.add(new String[]{"风", "攻", "人", "中", "美", "输", "保", "群"});

        name.add("剑圣 神无雪");
        level.add(2);
        label.add(new String[]{"火", "攻", "亚", "中", "美", "削", "越"});

        name.add("妖狐 静");
        level.add(2);
        label.add(new String[]{"水", "妨", "亚", "小", "美", "干", "削"});

        name.add("大将军 朱诺安");
        level.add(2);
        label.add(new String[]{"暗", "攻", "人", "中", "巨", "输", "支"});

        name.add("天才女军师 布兰妮");
        level.add(2);
        label.add(new String[]{"光", "妨", "人", "美", "支", "削", "爆", "群"});

        name.add("史莱姆女王 娜芙菈菈");
        level.add(2);
        label.add(new String[]{"风", "守", "魔", "中", "巨", "保", "防", "回", "生"});

        name.add("双蛇军团护士长 艾琳");
        level.add(1);
        label.add(new String[]{"光", "治", "人", "中", "巨", "回"});

        name.add("猫妖 娜娜");
        level.add(1);
        label.add(new String[]{"风", "攻", "魔", "小", "贫", "输"});

        name.add("龙女 伊维丝");
        level.add(1);
        label.add(new String[]{"火", "攻", "亚", "小", "贫", "输", "越", "群"});

        name.add("犬人族 朵拉");
        level.add(1);
        label.add(new String[]{"风", "守", "亚", "中", "美", "保", "防", "生"});

        name.add("魅魔 撒芭丝");
        level.add(1);
        label.add(new String[]{"暗", "妨", "魔", "中", "美", "干"});

        name.add("美人鱼 玛莲");
        level.add(1);
        label.add(new String[]{"水", "治", "亚", "中", "美", "回"});

        name.add("流浪魔法师");
        level.add(1);
        label.add(new String[]{"火", "攻", "人", "小", "巨", "输", "越"});

        name.add("黑暗精灵 索拉卡");
        level.add(1);
        label.add(new String[]{"暗", "妨", "亚", "中", "美", "削"});

        name.add("法斯帝国士兵 赛莲");
        level.add(0);
        label.add(new String[]{"暗", "守", "人", "中", "美", "保", "防"});

        name.add("法斯帝国法师 佩托拉");
        level.add(0);
        label.add(new String[]{"光", "攻", "人", "中", "贫", "输", "群"});

        name.add("魔族战士 芙蕾");
        level.add(0);
        label.add(new String[]{"光", "守", "魔", "中", "美", "保", "防"});

        name.add("魔族法师 玛努艾拉");
        level.add(0);
        label.add(new String[]{"暗", "攻", "魔", "中", "美", "输"});

        name.add("烈日国武士 桔梗");
        level.add(0);
        label.add(new String[]{"火", "妨", "人", "中", "美", "削"});

        name.add("烈日国巫女 枫");
        level.add(0);
        label.add(new String[]{"风", "治", "人", "中", "美", "回"});

        name.add("精灵射手 奥菈");
        level.add(0);
        label.add(new String[]{"风", "攻", "亚", "中", "美", "输"});

        name.add("矮人战士 可儿");
        level.add(0);
        label.add(new String[]{"水", "攻", "亚", "小", "贫", "输", "爆"});

        name.add("双蛇军团士兵 夏琳");
        level.add(0);
        label.add(new String[]{"火", "守", "人", "中", "美", "保", "防", "群"});

        name.add("圣光骑士 玛蒂娜");
        level.add(0);
        label.add(new String[]{"光", "守", "人", "中", "美", "保", "防", "生"});

        name.add("主神教团僧兵 克蕾雅");
        level.add(0);
        label.add(new String[]{"光", "治", "人", "中", "美", "回"});

        name.add("史莱姆娘 萝尔");
        level.add(0);
        label.add(new String[]{"水", "妨", "魔", "小", "美", "回", "削", "生"});

        name.add("牛女 米诺");
        level.add(0);
        label.add(new String[]{"风", "守", "亚", "中", "巨", "保", "防", "干"});

        name.add("蛇女 拉米亚");
        level.add(0);
        label.add(new String[]{"火", "妨", "魔", "中", "美", "干"});

        name.add("鸟身女妖 哈比");
        level.add(0);
        label.add(new String[]{"风", "妨", "魔", "中", "美", "干", "削"});

        name.add("法斯精锐近卫 安娜");
        level.add(0);
        label.add(new String[]{"火", "守", "人", "中", "美", "保", "防"});

        name.add("法斯精锐骑士 布兰");
        level.add(0);
        label.add(new String[]{"风", "攻", "人", "中", "美", "输", "防"});

        name.add("法斯高阶法师 诺诺可");
        level.add(0);
        label.add(new String[]{"水", "攻", "人", "中", "美", "输", "爆"});

        name.add("试做机三号");
        level.add(0);
        label.add(new String[]{"光", "攻", "小", "美", "输", "生"});

        if (mod == 1) {
            int size = name.size();
            for (int i = 0; i < size; i++) {
                if (name.get(i).contains(key))
                    System.out.println(level.get(i) + "  [" + name.get(i) + "] " + " [" + String.join("、", label.get(i)) + "]");
            }
            System.out.println("\n查找完毕");
            return;
        }

        String maxLabel = "";
        float maxPer = 0;

        int lbl = labels.length;
        for (int i = 0; i < lbl; i++) {
            float sr = 0;
            float all = 0;
            int size = level.size();
            for (int j = 0; j < size; j++) {
                String[] temp = label.get(j);
                int length = temp.length;
                boolean suit = false;
                for (int k = 0; k < length; k++) {
                    suit = 0 == temp[k].compareTo(labels[i]);
                    if (suit) break;
                }
                if (suit) {
                    if (level.get(j) == 2) sr++;
                    all++;
                }
            }
            if (all == 0) continue;
            System.out.print("[" + labels[i] + "]:" + (sr / all) + "\n");
            if (sr / all > maxPer) {
                maxLabel = "[" + labels[i] + "]:";
                maxPer = sr / all;
            }
        }

        for (int i = 0; i < lbl; i++) {
            for (int a = i + 1; a < lbl; a++) {
                float sr = 0;
                float all = 0;
                int size = level.size();
                for (int j = 0; j < size; j++) {
                    String[] temp = label.get(j);
                    int length = temp.length;
                    boolean suiti = false;
                    boolean suita = false;
                    for (int k = 0; k < length; k++) {
                        suiti |= 0 == temp[k].compareTo(labels[i]);
                        suita |= 0 == temp[k].compareTo(labels[a]);
                        if (suiti && suita) break;
                    }
                    if (suiti && suita) {
                        if (level.get(j) == 2) sr++;
                        all++;
                    }
                }
                if (all == 0) continue;
                System.out.print("[" + labels[i] + "、" + labels[a] + "]:" + (sr / all) + "\n");
                if (sr / all > maxPer) {
                    maxLabel = "[" + labels[i] + "、" + labels[a] + "]:";
                    maxPer = sr / all;
                }
            }
        }

        for (int i = 0; i < lbl; i++) {
            for (int a = i + 1; a < lbl; a++) {
                for (int b = a + 1; b < lbl; b++) {
                    float sr = 0;
                    float all = 0;
                    int size = level.size();
                    for (int j = 0; j < size; j++) {
                        String[] temp = label.get(j);
                        int length = temp.length;
                        boolean suiti = false;
                        boolean suita = false;
                        boolean suitb = false;
                        for (int k = 0; k < length; k++) {
                            suiti |= 0 == temp[k].compareTo(labels[i]);
                            suita |= 0 == temp[k].compareTo(labels[a]);
                            suitb |= 0 == temp[k].compareTo(labels[b]);
                            if (suiti && suita && suitb) break;
                        }
                        if (suiti && suita && suitb) {
                            if (level.get(j) == 2) sr++;
                            all++;
                        }
                    }
                    if (all == 0) continue;
                    System.out.print("[" + labels[i] + "、" + labels[a] + "、" + labels[b] + "]:" + (sr / all) + "\n");
                    if (sr / all > maxPer) {
                        maxLabel = "[" + labels[i] + "、" + labels[a] + "、" + labels[b] + "]:";
                        maxPer = sr / all;
                    }
                }
            }
        }
        System.out.println("\nSR概率最大的标签\n" + maxLabel + maxPer);
    }
}
posted @ 2021-08-25 15:52  蓝火BlueFlameAshe  阅读(1207)  评论(0编辑  收藏  举报