HDU 1015

本文介绍了一个使用Java实现的暴力破解算法示例,该算法通过排列组合的方式尝试不同的字符组合来寻找符合特定数学条件的字符串。文章包含完整的源代码,并演示了如何读取输入并输出符合条件的字符串。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

java暴力解决

Sample Input
1 ABCDEFGHIJKL
11700519 ZAYEXIWOVU
3072997 SOUGHT
1234567 THEQUICKFROG
0 END

Sample Output
LKEBA
YOXUZ
GHOST
no solution

import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import java.util.Scanner;

import javax.print.DocFlavor.CHAR_ARRAY;

public class Safecracker {
    public static void main(String[] args) {
        Scanner input = new Scanner(System.in);
        Map<Integer, String> map = new HashMap<Integer, String>();
        List <String> list = new ArrayList<String>();
        List <String> result = new ArrayList<String>();
        boolean exist = true;
        int valu = input.nextInt();
        String alph = input.nextLine();
        while (valu != 0 && !alph.equals("END")) {
            map.put(valu, alph);
            char[] array = alph.toCharArray();

            for (int i = array.length - 1; i > 0 ; i--) {
                for (int j = 0; j < array.length ; j++) {
                    for (int k = 0; k < array.length ; k++) {
                        for (int l = 0; l < array.length ; l++) {
                            for (int m = 0; m < array.length; m++) {
                                if (i != j && i != k && i != l && i != m
                                        && j != k && j != l && j != m && k != l
                                        && k != m && l != m && m != l) {
                                    int a = array[i] - 64;
                                    int b = (array[j] - 64) * (array[j] - 64);
                                    int c = (array[k] - 64) * (array[k] - 64)
                                            * (array[k] - 64);
                                    int d = (array[l] - 64) * (array[l] - 64)
                                            * (array[l] - 64) * (array[l] - 64);
                                    int e = (array[m] - 64) * (array[m] - 64)
                                            * (array[m] - 64) * (array[m] - 64)
                                            * (array[m] - 64);
                                    if ((a - b + c - d + e) == valu) {
                                        String s = (char) array[i]+ "" +(char) array[j] + (char) array[k]+ (char) array[l]+ (char) array[m]  ;
                                        list.add(s);
                                        exist = false;
                                        break;
                                    }                   
                                }
                            }
                        }
                    }
                }

            }
            if (exist) {
                result.add("no solution");
            }else {
                list.sort(null);
                result.add(list.get(list.size()-1));
                list.clear();
            }

            valu = input.nextInt();
            alph = input.nextLine();
            exist = true;
        }
        for (int i = 0; i < result.size(); i++) {
            System.out.println(result.get(i));
        }
    }
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值