【每日编程-392期】哈工大上机题(一)

教育   2024-12-21 18:02   广西  

哈工大上机题(一)


每日编程中遇到任何疑问、意见、建议请公众号留言或加入每日编程群聊739635399



解密——加密的算法是26个英文字母,向后移三位为密文(a加密为d…最后x->a;y->b;z->c)有大小写。输入密文,计算明文。

输入格式:

输入密文

输出格式:

输出明文

输入样例:

An asdwa lijxa

输出样例:

Xk xpatx ifgux

解决方法:

(1)算法的基本思想:

难点在于处于边界处的字母进行加密解密。

          对于普通的字母char,加密:char+3,解密:char-3

         处于边界处的,如x,加密:x->a,我们可以采取取余的方法,构成环

               (x+3)%26 -> a

         但解密时,a->x,a-3不在范围内了,需要再补上26

              (a-3+26)%26 -> x

         对于所有的char,我们都可以,加密:(char+3)%26

                                      解密:(char-3+26)%26

(2)代码实现:

#include <iostream>

using namespace std;

bool isCharacter(char c)//检查是否是字母
bool isUpper(char c);     //检查是否是大写字母
char encode(char c);      //加密字母c
char decode(char c);      //解密字母c

int main(void)
{
    char code[100];
    cout << "输入密文:" << endl;
    //cin >> code;
    cin.getline(code, 100);
    cout << "明文为:" << endl;
    int i = 0;
    while (code[i] != '\0')
    {
        cout << decode(code[i]);
        i++;
    }
    cout << endl;
    return 0;
}

bool isCharacter(char c)
{
    if ((c >= 'A' && c <= 'Z') || (c >= 'a' && c <= 'z'))
    {
        return true;
    }
    return false;
}

bool isUpper(char c)
//检查是否是大写字母
    if (c >= 'A' && c <= 'Z')
    {
        return true;
    }
    return false;
}

char encode(char c)
{
    if (!isCharacter(c))
        return c; //非字母字符直接返回
    char result;
    if (isUpper(c))
    { //c是大写字母
        result = (c - 'A' + 3) % 26 + 'A';
    }
    else
    {
        result = (c - 'a' + 3) % 26 + 'a'//先c-'a'转换成整数做加密取余运算,再+'a'转换成字母
    }
    return result;
}

char decode(char c)
{
    if (!isCharacter(c))
        return c; //非字母字符直接返回
    char result;
    if (isUpper(c))
    { //c是大写字母
        result = (c - 'A' - 3 + 26) % 26 + 'A';
    }
    else
    {
        result = (c - 'a' - 3 + 26) % 26 + 'a';
    }
    return result;
}

明日预告:哈工大上机题(二)

1-20号牌,输入牌的数目,以及每张牌的编号。只有三张连续的牌可以兑换一张新牌,新牌不能参与兑换。编程实现计算可兑换的牌数。

输入格式:

输入牌的数量

输入牌的编号

输出格式:

能兑换的牌的数量

输入样例:

10
1 1 2 2 3 5 5 6 7 9

输出样例:

2


灰灰考研
最全的【计算机考研】【软件考研】考研信息! 最丰富的共享资料! 最大程度上帮助学渣狗登上研究生大门!
 最新文章