(C卷,100分)- 密码解密(Java & JS & Python & C)

题目描述

给定一段“密文”字符串 s,其中字符都是经过“密码本”映射的,现需要将“密文”解密并输出。

映射的规则('a' ~ 'i')分别用('1' ~ '9')表示;('j' ~ 'z')分别用("10*" ~ "26*")表示。

约束:映射始终唯一。

输入描述

“密文”字符串

输出描述

明文字符串

备注

翻译后的文本长度在100以内

用例

输入 20*19*20*
输出 tst
说明

题目解析

本题有多种解题思路,我的思路是利用字符串替换操作。

即将如下密文和明文进行按照顺序依次映射替换

  • "26*" → "z"
  • "25*" → "y"
  • "10*" → "j"
  • "9" → "i"
  • "1" → "a"

这里优先将从“26*” ~ "10*" 开始映射替换,比如题目用例:

20*19*20*

如果优先进行 "1" ~ “9” 密文的映射替换,则会产生错误答案。

更多实现细节,请看代码。

JS算法源码

const rl = require("readline").createInterface({ input: process.stdin });
var iter = rl[Symbol.asyncIterator]();
const readline = async () => (await iter.next()).value;

// 输入处理
void (async function () {
  let s = await readline();

  for (let i = 26; i >= 1; i--) {
    const key = i + (i > 9 ? "*" : "");
    const val = String.fromCharCode(97 + i - 1);

    s = s.replaceAll(key, val);
  }

  console.log(s);
})();

Java算法源码

import java.util.Scanner;

public class Main {

  public static void main(String[] args) {
    Scanner sc = new Scanner(System.in);

    String s = sc.nextLine();

    for (int i = 26; i >= 1; i--) {
      String key = i + (i > 9 ? "\*" : "");
      String val = String.valueOf((char) ('a' + i - 1));
      s = s.replaceAll(key, val);
    }

    System.out.println(s);
  }
}

 

Python算法源码

# 输入获取
s = input()

for i in range(26, 0, -1):
    key = str(i)
    if i > 9:
        key += "*"

    val = chr(97 + i - 1)

    s = s.replace(key, val)

print(s)

C算法源码

#include <stdio.h>
#include <stdlib.h>
#include <string.h>

char* replace(char* s, char* old, char* new) {
    char* sub = strstr(s, old);

    if(sub == NULL) {
        return s;
    }

    char* res = (char*) calloc(100, sizeof(char));

    while (sub != NULL) {
        sub[0] = '';
        strcat(res, s);
        strcat(res, new);

        s = sub + strlen(old);
        sub = strstr(s, old);
    }

    strcat(res, s);

    return res;
}

int main() {
    char* s = (char*) calloc(100, sizeof(char));
    gets(s);

    for (int i = 26; i >= 1; i--) {
        char key[4];
        sprintf(key, "%d", i);

        if(i > 9) {
            strcat(key, "*");
        }

        char val[2];
        sprintf(val, "%c", 97 + i - 1);

        s = replace(s, key, val);
    }

    puts(s);

    return 0;
}

免责声明:

1、IT资源小站为非营利性网站,全站所有资料仅供网友个人学习使用,禁止商用
2、本站所有文档、视频、书籍等资料均由网友分享,本站只负责收集不承担任何技术及版权问题
3、如本帖侵犯到任何版权问题,请立即告知本站,本站将及时予与删除下载链接并致以最深的歉意
4、本帖部分内容转载自其它媒体,但并不代表本站赞同其观点和对其真实性负责
5、一经注册为本站会员,一律视为同意网站规定,本站管理员及版主有权禁止违规用户
6、其他单位或个人使用、转载或引用本文时必须同时征得该帖子作者和IT资源小站的同意
7、IT资源小站管理员和版主有权不事先通知发贴者而删除本文

0

评论0

站点公告

没有账号?注册  忘记密码?