您的位置:首页 > 其它

普及练习场 字符串处理 斯诺登的密码

2017-12-15 00:34 309 查看
题目链接

题意理解

这题是说,要把6个单词中的一部分转化成数字并对这些数字进行全排列。坑点的话,好像没有吧。就设计到一个 排列组合的写法,我差点没有想起来。还有虽然想了想写出来了,但是dfs的终止条件时对min处理的不好,可以修改min。总的来说,不难,但是要好好写。

代码

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

public class Main {
static boolean[] visited = new boolean[6];
static long min = 1000000000000l;
static List<String> elements;
public static void main(String[] args) {
for(int i = 0; i < 6; i++) {
visited[i] = false;
}
Map<String, Integer> numbers = new HashMap<>();
String[] nums = {"zero", "one", "two", "three", "four", "five", "six", "seven", "eight", "nine", "ten", "eleven", "twelve", "thirteen", "fourteen", "fifteen", "sixteen", "seventeen", "eighteen", "nineteen", "twenty"};
for(int i = 0; i < nums.length; i++) {
numbers.put(nums[i], i);
}
numbers.put("a", 1);
numbers.put("both", 2);
numbers.put("another", 1);
numbers.put("first", 1);
numbers.put("second", 2);
numbers.put("third", 3);
elements = new LinkedList<>();
Scanner scanner = new Scanner(System.in);
String word;
for(int i = 0; i < 6; i++) {
word = scanner.next().toLowerCase();
if(numbers.containsKey(word)) {
elements.add(itos((int)Math.pow(numbers.get(word), 2) % 100));
}
}
scanner.close();
dfs(elements.size(), elements.size(), "");
if(min != 1000000000000l) {
System.out.println(min);
} else {
return;
}

}

private static void dfs(int maxn, int x, String s) {
if(x == 0) {
if(s.equals("")) {
System.out.println(0);
return;
}
long temp = stoi(s);
if(temp < min) {
min = temp;
}
return;
}
for(int i = 0; i < maxn; i++) {
if(!visited[i]) {
s += elements.get(i);
visited[i] = true;
dfs(maxn, x - 1, s);
visited[i] = false;
s = s.substring(0, s.length() - 2);
}
}
}
private static String itos(long x) {
String result = String.valueOf(x);
if(result.length() < 2) {
result = "0" + result;
}
return result;
}

private static long stoi(String s) {
while (s.startsWith("0")) {
s = s.substring(1);
}
return Long.valueOf(s);
}
}


欢迎加入“不会算法一群菜鸟”,群号是⑥⑥①⑨②2025,这是我设置的一道很低的门槛用来阻止广告的。入群的验证暗号是:我爱编译原理
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: