通过移回字母解码字符串[关闭]

问题描述 投票:-2回答:2

在为加拿大CCC大赛练习时,我遇到了如下问题(https://dmoj.ca/problem/ccc12j4)。但是,当我使用官方评分员提交时,我无法得分。我知道平地机是合法的,而且我的代码没有超出时间或内存限制。

public static void main(String[] args) {
    // TODO code application logic here
    Scanner oIn = new Scanner(System.in);
    int k = oIn.nextInt();

    oIn.nextLine();
    String word = oIn.nextLine();
    word = " " + word;
    char[] dCode = new char[word.length()];
    char[] alphabet = {'Z', 'Y', 'X', 'W', 'V', 'U', 'T', 'S', 'R', 'Q', 'P', 'O', 'N', 'M', 'L', 'K', 'J', 'I', 'H', 'G', 'F', 'E', 'D', 'C', 'B', 'A', 'Z', 'Y', 'X', 'W', 'V', 'U', 'T', 'S', 'R', 'Q', 'P', 'O', 'N', 'M', 'L', 'K', 'J', 'I', 'H', 'G', 'F', 'E', 'D', 'C', 'B', 'A', 'Z', 'Y', 'X', 'W', 'V', 'U', 'T', 'S', 'R', 'Q', 'P', 'O', 'N', 'M', 'L', 'K', 'J', 'I', 'H', 'G', 'F', 'E', 'D', 'C', 'B', 'A', 'Z', 'Y', 'X', 'W', 'V', 'U', 'T', 'S', 'R', 'Q', 'P', 'O', 'N', 'M', 'L', 'K', 'J', 'I', 'H', 'G', 'F', 'E', 'D', 'C', 'B', 'A', 'Z', 'Y', 'X', 'W', 'V', 'U', 'T', 'S', 'R', 'Q', 'P', 'O', 'N', 'M', 'L', 'K', 'J', 'I', 'H', 'G', 'F', 'E', 'D', 'C', 'B', 'A', 'Z', 'Y', 'X', 'W', 'V', 'U', 'T', 'S', 'R', 'Q', 'P', 'O', 'N', 'M', 'L', 'K', 'J', 'I', 'H', 'G', 'F', 'E', 'D', 'C', 'B', 'A',};

    for (int i = 1; i < word.length(); i++) {

        char cur = word.charAt(i);
        int s = (i * 3) + k;

        for (int j = 1; j < 27; j++) {

            if (alphabet[j] == cur) {

                dCode[i] = alphabet[j + s];

            }

        }

    }

    for (int i = 0; i < word.length(); i++) {

        System.out.print(dCode[i]);

    }

}

我使用给定的示例运行代码,它工作正常。有没有我缺少的测试用例?

java
2个回答
1
投票
word = " " + word;

您在每个单词前面添加一个空格,并且空间显示在输出中。

看起来你正在这样做,所以你可以循环使用i=1。而不是修改输入单词,最好从0循环并调整s的计算。

for (int i = 0; i < word.length(); i++) {
//           ^    
    int s = ((i+1) * 3) + k;
//           ^^^^^    

-1
投票

哎呀。错误的语言。这是一个例子,这次在Java中:

public class x {

    public static void main(String ...args) {
        int K = 5;
        String encoded = "JTUSUKG";
        StringBuffer decoded = new StringBuffer();
        K = K % 26;
        for (int i = 0 ; i < encoded.length() ; i ++)
            decoded.append((char)('A' + ((encoded.charAt(i) - 'A') - 3 * (i + 1) - K + 260000) % 26));
        System.out.println(decoded.toString());
    }
 }

苦苦挣扎,想出额外的“+ 260000”。 Java模数运算符的工作方式与Python不同。它可以保留负数。如果单词可能超长,那么你可能想要做更严格的事情。

努力理解这段代码。它将教你如何将字符作为数值处理。如果你愿意,我可以通过逐件注释来帮助你。

© www.soinside.com 2019 - 2024. All rights reserved.