算法竞赛入门经典(第2版)例题4-4信息解码(UVa213)

算法竞赛入门经典(第2版)例题4-4信息解码(UVa213)

Scanner的next和hasNext方法用不太好,输入环节有点小问题,直接将变量赋值成编码头和编码文本是可以运行的。

import java.util.Scanner;

/**
 * 
 * @author Joker
 *
 */
public class UVa213 {
    /**
     * 思路:<br/>
     * 将编码头放入二维数组,将编码文本放入数组,读取编码文本数组的三个元素,<br/>
     * 将其转化为十进制的数ge(“每次读取的个数”),读取ge个元素,将其转化<br/>
     * 为十进制的数jm,到bm中查找第(ge-1)行第(jm-1)个。打印输出。<br/>
     * 当jm==(2的ge次方-1),读取下三个元素,如果不为0重复上述操作,为0结束操作。
     * 
     * @param sss
     *            用来存放编码头
     * @param bm
     *            将编码头存放到二维数组,行表示其长度,列表示该长度的第几个
     * @param ttt
     *            存放编码文本
     * @param ge
     *            存放每次读取的个数
     * @param m
     *            存放每次读取ge个元素组成的字符串
     * @param jm
     *            将m转化为二进制
     */
    public static void main(String[] args) {
        Scanner in = new Scanner(System.in);
        String str = "$#**\\";// in.nextLine();
        String[] sss = str.split("");
        String[][] bm = new String[][] { new String[1], new String[3], new String[7] };
        // 将编码头存入二维数组bm
        for (int i = 0, j = 0; i < bm.length && j < sss.length; i++)
            for (int k = 0; k < bm[i].length && j < sss.length; k++)
                bm[i][k] = sss[j++];
        str = "0100000101101100011100101000";
        // while (in.hasNextInt())
        // str += in.next();
        String[] ttt = str.split("");
        // i为指针,指向当前读到的编码文本的位置
        for (int i = 0; i < ttt.length;) {
            int ge = Integer.parseInt(ttt[i++] + ttt[i++] + ttt[i++], 2);
            if (ge == 0)
                break;
            String m = "";
            for (int j = 0; j < ge; j++)
                m += ttt[i++];
            int jm = Integer.parseInt(m, 2);
            // Math.pow(2,ge) 2的ge次方
            while (jm != Math.pow(2, ge) - 1) {
                System.out.print(bm[ge - 1][jm]);
                m = "";
                for (int j = 0; j < ge; j++)
                    m += ttt[i++];
                jm = Integer.parseInt(m, 2);
            }
        }
    }
}

猜你喜欢

转载自blog.csdn.net/qq_36084640/article/details/79255326