• hiho #1361 Playfair密码表


    题目1 : Playfair密码表

    时间限制:10000ms
    单点时限:1000ms
    内存限制:256MB

    描述

    小Hi和小Ho经常用Playfair密码表加密自己的代码。 密码表是按以下步骤生成的。

    1. 随机选择一个只包含大写字母的单词S作为密钥。  

    2. 将S中的所有字母J替换为字母I。  

    3. 将S中的字母依次填写进一个5x5的矩阵,按照从上到下、从左到右的顺序填充格子。填充过程中略过已经在密码表中的字母。  

    4. 将'A'-'I', 'K'-'Z'(除去J之外的所有大写字母)中没有出现在密码表中的大写字母按照字母表顺序填入矩阵剩余的格子中。

    举个例子:单词DIJSTRA,替换字母得到DIISTRA;将DIISTRA填入矩阵得到的密码表为(注意第二个I被略过了):

    DISTR
    A....
    .....
    .....
    .....
    

    最后将剩余字母填入,得到密码表:

    DISTR
    ABCEF
    GHKLM
    NOPQU
    VWXYZ
    

    给定作为密钥的单词,你能求出密码表吗?

    输入

    第1行:一行字符串,只包含大写字母,长度不超过200

    输出

    共5行,每行5个字母,表示密码表。

    样例输入
    HIHOCODER
    样例输出
    HIOCD
    ERABF
    GKLMN
    PQSTU
    VWXYZ

    思路:

    记录单词S中出现过的字母,因为条件设定好了输出5x5 的矩阵,所以可以直接用一维数组,存放最后输出的结果,如果是nxn的矩阵,可设置一个变量m,用[m/5][m%n]作为二维数组的下标,每存一个数,m++。

    strlen(),在string.h的头文件中

    AC代码:

     1 #include "iostream"
     2 #include "string.h"
     3 #include "vector"
     4 #define MAX 201
     5 using namespace std;
     6 
     7 char str[MAX];
     8 bool v[MAX] = { false };
     9 char ans[25];
    10 int n, m;
    11 
    12 int main()
    13 {
    14     cin >> str;
    15     n = strlen(str);
    16     m = 0;
    17 
    18     for (int i = 0; i < n; i++)
    19     {
    20         if (str[i] == 'J')
    21             str[i] = 'I';
    22         if (!v[str[i]])
    23         {
    24             v[str[i]] = true;
    25             ans[m] = str[i];
    26             m++;
    27         }
    28     }
    29 
    30     for (char i = 'A'; i <= 'Z'; i++)
    31     {
    32         if (i == 'J' || v[i])
    33             continue;
    34         ans[m] = i;
    35         m++;
    36     }
    37 
    38     for (int i = 0; i < 25; i++)
    39     {
    40         cout << ans[i];
    41         if ((i + 1) % 5 == 0)
    42             cout << endl;
    43     }
    44 
    45     system("pause");
    46 }
  • 相关阅读:
    代码review之 isInfoEnable()
    sdk、jdk、jre、jvm、jdt、cdt分别都是什么东西
    思考总结: 决胜21点 开篇 概率问题
    Java多线程开发系列之四:玩转多线程(线程的控制2)
    Java多线程开发系列之四:玩转多线程(线程的控制1)
    Java多线程开发系列之三:线程这一辈子(线程的生命周期)
    Java多线程开发系列之二:如何创建多线程
    [系列] Gin框架
    [系列] Gin框架
    [系列] Gin 框架
  • 原文地址:https://www.cnblogs.com/SeekHit/p/5796757.html
Copyright © 2020-2023  润新知