算法竞赛入门经典java版程序ch4 UVa213

来源:互联网 发布:查看占用80端口的进程 编辑:程序博客网 时间:2024/05/18 15:51

本题runtimeError,还没找到原因。

以后有时间再来找问题。


package ch4.uva213;import java.util.HashMap;import java.util.Scanner;//UVa213//此题runtime Error。 刘汝佳的题解可以过。但不如是何原因class Main {static final int x = 8;static String[] dic = new String[8*(1<<8)];// 题目中的2进制表static String[] dic2 = new String[10];// 不大于7的数的2进制表static String header = "";static String encode = "";static HashMap<String, String> map = new HashMap<String, String>();// 整数转2进制字符串,补前导零public static String int2b(int a, int cnt) {// System.out.println("a= "+a+" cnt="+cnt);String leaderZero = "";String b = Integer.toBinaryString(a);for (int i = 0; i < cnt - b.length(); i++) {leaderZero += "0";}b = leaderZero + b;return b;}// 2进制字符串,查表得到整数public static int b2Int(String s) {for (int i = 0; i < 10; i++) {if (dic2[i].equals(s)) {return i;}}return 0;}// 按题打表dic,dic2public static void init() {int count = 0;String[][] temp = new String[x][];for (int i = 0; i < x; i++) {int cnt = (int) Math.pow(2, i) - 1;// 有几个数temp[i] = new String[cnt];for (int j = 0; j < cnt; j++) {int k = count++;dic[k] = int2b(j, i);// 位数为i//System.out.print(dic[k]+",");}}// 初始化 1-7的2进制字串for (int i = 0; i < 10; i++) {dic2[i] = int2b(i, 3);}}//全111判断public static boolean isAll1(String s){char[] chrArr=s.toCharArray();for(int i=0;i<chrArr.length;i++){if(chrArr[i]=='0')return false;}return true;}public static void makeMap(String line) {char[] chrArr = line.toCharArray();for (int i = 0; i < chrArr.length; i++) {map.put(dic[i], "" + chrArr[i]);}}public static void print() {for (int i = 0; i < 256; i++) {System.out.print(dic[i] + ",");}}public static void main(String[] args) {init();// print();Scanner cin = new Scanner(System.in);String line = "";boolean isEncoder = false;int count=0;BE:while ((line = cin.nextLine()) != null) {//文件尾//header编码头if(line.length()<1)continue;if (!(line.charAt(0) == '0' || line.charAt(0) == '1')) {//初始化所有数据map.clear();encode="";header="";//header = line;makeMap(line);// 将head的每一个字母与 code进行映射isEncoder = true;if(count!=0){ //在除第1行外,前面打回车System.out.println();}continue;}if (isEncoder == true) {encode += line;//System.out.println("encode=" + encode);if (encode.length()>=3&&encode.substring(encode.length() - 3, encode.length()).equals("000")) {count++;// 每次读取len个字符并查表输出int i = 0;String key = "";boolean isStart = true;int len = 0;while (true) {if(i>=encode.length()-3){break;}if (isStart) {// 算第一段的长度len = b2Int(encode.substring(i, i+3));i = i + 3;if(len==0) continue BE;// String// newEncode=encode.substring(len-1,encode.length()-3);isStart = false;} else {key = encode.substring(i, i + len);//System.out.println("i="+i+" "+key+", ");i = i + len;if ( isAll1(key)) {// 全1 结尾isStart = true;continue;}System.out.print(map.get(key));}}}}}}}/*TNM AEIOU0010101100011101000100111011001111000$#**\0100000101101100011100101000$#* *\0100000101101100011100101000*/




原创粉丝点击