80分完了
查看原帖
80分完了
749028
QAQ5楼主2024/12/29 18:57
import java.util.ArrayList;
import java.util.HashSet;
import java.util.Scanner;

public class Main {
    static ArrayList<String> numCodes;//00 01 02

    static {
        Scanner scanner = new Scanner(System.in);
        String sentence = scanner.nextLine();
        ArrayList<Integer> numbers = new ArrayList<>();
        String[] words = sentence.split(" ");
        for (String word : words) {
            Integer result = switch (word) {
                case "zero" -> 0;
                case "one", "a", "another", "first" -> 1;
                case "two", "both", "second" -> 2;
                case "three", "third" -> 3;
                case "four" -> 4;
                case "five" -> 5;
                case "six" -> 6;
                case "seven" -> 7;
                case "eight" -> 8;
                case "nine" -> 9;
                case "ten" -> 10;
                case "eleven" -> 11;
                case "twelve" -> 12;
                case "thirteen" -> 13;
                case "fourteen" -> 14;
                case "fifteen" -> 15;
                case "sixteen" -> 16;
                case "seventeen" -> 17;
                case "eighteen" -> 18;
                case "nineteen" -> 19;
                case "twenty" -> 20;
                default -> null;
            };
            if (result != null) numbers.add(result);
        }
        numCodes = new ArrayList<>();
        for (Integer number : numbers) {
            number = number * number % 100;
            numCodes.add((number < 10 ? "0" : "") + number);
        }
    }//太碍事,顺便动态内存

    public static void main(String[] args) {
        if (numCodes.isEmpty()) {
            System.out.println(0);
            return;
        }
        //获取所有组合,用最笨的办法算了,找不到算法只能自己想了
        ArrayList<String> allArrange = new ArrayList<>();
        int[] indexLine = new int[numCodes.size()];//只要不是相同的索引哪怕是相同的值
        final int endIndex = indexLine.length - 1;
        exit:
        while (true) {
            if (!repeatIndex(indexLine)) allArrange.add(indexCash(indexLine));
            //+1
            if (indexLine[endIndex] != endIndex)//[0,1]要进位
                indexLine[endIndex]++;
            else {
                //要进位
                indexLine[endIndex] = 0;
                int left = endIndex - 1;
                while (true) {
                    if (left < 0)//左边没数了,加完了,完成退出
                        break exit;
                    indexLine[left]++;//左边有数,它加1
                    if (indexLine[left] > endIndex) {//加超了,继续往左加,这个是零
                        indexLine[left] = 0;
                        left--;
                    } else break;
                }
            }
        }
        int min = Integer.parseInt(allArrange.getFirst());
        for (int i = 1; i < allArrange.size(); i++) {
            int compared = Integer.parseInt(allArrange.get(i));
            if (compared < min)
                min = compared;
        }
        System.out.println(min);
    }

    static String indexCash(int[] indexLine) {
        StringBuilder builder = new StringBuilder();
        for (int index : indexLine)
            builder.append(numCodes.get(index));
        return builder.toString();
    }

    static boolean repeatIndex(int[] indexLine) {
        HashSet<Integer> indexS = new HashSet<>();
        for (int index : indexLine)
            if (indexS.contains(index)) return true;
            else indexS.add(index);
        return false;
    }
}
2024/12/29 18:57
加载中...