HDOJ 1015 Safecracker

来源:互联网 发布:cpb 面膜 知乎 编辑:程序博客网 时间:2024/05/20 07:18

HDACM 1015


题目要求输出的是字典学上最大的,所以我们可以把输入的字符串转化为一个int数组表示,然后排序,排序后从大到小遍历,只要有一个符合题目要求,说明这个结果就是最终结果。然后跳出多重嵌套循环,即可输出。


import java.util.Arrays;import java.util.Scanner;public class Main {public static void main(String[] args) {int table[][] = new int[27][6];for (int i = 1; i < table.length; i++) {table[i][1] = i;for (int j = 2; j < 6; j++) {table[i][j] =  table[i][j-1]*i;}}//for (int i = 0; i < table.length; i++) {//for (int j = 0; j < 6; j++) {//System.out.print(table[i][j]+" ");//}//System.out.println();//}Scanner sc = new Scanner(System.in);while(sc.hasNext()){int taget = sc.nextInt();String str = sc.next();if (taget==0&&"END".equals(str)) {break;}int stri[] = new int[str.length()];for (int i = 0; i < stri.length; i++) {stri[i] = str.charAt(i)-'A'+1;}Arrays.sort(stri);String ans = "";ok://定义一个跳出多重for循环的标志for (int i = stri.length-1; i>=0; i--) {for (int j = stri.length-1; j >=0; j--) {if (i!=j) {for (int k = stri.length-1; k >=0; k--) {if (i!=k&&j!=k) {for (int l = stri.length-1; l >=0; l--) {if (i!=l&&j!=l&&k!=l) {for (int m = stri.length-1; m >=0; m--) {if (i!=m&&j!=m&&k!=m&&l!=m) {int num = table[stri[i]][1]-table[stri[j]][2]+table[stri[k]][3] -table[stri[l]][4]+table[stri[m]][5];if (num==taget) {ans += ""+(char)(stri[i]+'A'-1)+(char)(stri[j]+'A'-1)+(char)(stri[k]+'A'-1)+(char)(stri[l]+'A'-1)+(char)(stri[m]+'A'-1);break ok;//跳出多重for循环}}}}}}}}}}if ("".equals(ans)) {System.out.println("no solution");continue;}System.out.println(ans);}sc.close();}}


原创粉丝点击