普及练习场 字符串处理 斯诺登的密码
2017-12-15 00:34
309 查看
题目链接
欢迎加入“不会算法一群菜鸟”,群号是⑥⑥①⑨②2025,这是我设置的一道很低的门槛用来阻止广告的。入群的验证暗号是:我爱编译原理
题意理解
这题是说,要把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,这是我设置的一道很低的门槛用来阻止广告的。入群的验证暗号是:我爱编译原理
相关文章推荐
- 普及练习场 字符串处理 潜伏者
- 普及练习场 字符串处理 拼数
- NOIP2000普及组 计算器的改良 Codevs1015 字符串复杂处理
- OpenJudge百炼-2819-W的密码-C语言-字符串处理
- 成长轨迹47 【ACM算法之路 百炼poj.grids.cn】【字符串处理】【2820:古代密码】
- 成长轨迹48 【ACM算法之路 百炼poj.grids.cn】【字符串处理】【2818:密码】
- mysql 学习记录(五)--字符串、数值处理、日期、查询的逻辑处理、系统相关内容查询、IP地址相关、密码
- 成长轨迹49 【ACM算法之路 百炼poj.grids.cn】【字符串处理】【2819:W的密码】
- mysql 学习---->字符串、数值处理、日期、查询的逻辑处理、系统相关内容查询、IP地址相关、密码
- noip1996 字符串编辑 - 普及组 (模拟,字符串处理)
- 普及练习场 交叉模拟 字符串的展开
- 【日常学习】【字符串处理】noip2011普及组第2题 统计单词数题解
- L - 破译密码 有关字符串的处理
- OpenJudge百炼-2820-古代密码-C语言-字符串处理
- 字符串处理
- 0707什么是JSON+如何处理JSON字符串0
- C库函数使用与总结之字符串处理函数
- 有一字符串,包含数字与字母,编程去除数字。要求:1、要求在原字符串中操作 2、使用指针处理
- 字符串的处理
- 01-替换输入文本的空格和换行(字符串处理)