《算法笔记》 2.5小节 问题 D: 习题6-12 解密

本文深入解析了一种特定的密码转换算法,该算法将英文字母按照逆序规则进行转换,同时保持非字母字符不变。文章提供了详细的算法实现过程,包括ASCII码的运用,以及如何通过代码实现这一转换。适合对密码学、算法设计感兴趣的读者。

题目描述

有一行电文,已按如下规律译成密码:

A-->Z        a-->z

B-->Y        b-->y

C-->X        c-->x

......          ......

即第一个字母变成第26个字母,第i个字母变成第(26-i+1)个字母,非字母字符不变。要求根据密码译回原文,并输出。

输入

输入一行密文

输出

解密后的原文,单独占一行。

样例输入

ZYX123zyx

样例输出

ABC123abc

这道题目的难点在于如何表达出转换密文的式子。

大家需要首先知道A和a的ascll码分别是65和97。

当然可能还有更简单的方法,大家借鉴一下我这个就可以了。
 

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

int main()
{   
    char str[10];
    char c;
    gets(str);
    int len=strlen(str);
    
    for(int i=0;i<len;i++){
        if(str[i]>='A'&&str[i]<='Z'){
           
           c=64+26-(str[i]-64)+1;//直接表达出要交换的字母的ASCLL码值,然后再将其赋值给char型的str[i]
           str[i]=c;
        }
        if(str[i]>='a'&&str[i]<='z'){
           c=96+26-(str[i]-96)+1;
           str[i]=c;           //大家还可以将这两段if代码合成一个大的if(str[i]>='A'&&str[i]<='Z'||str[i]>='a'&&str[i]<='z'),因为我是个小白级别,尽量要代码还是有层次一些,这样的复杂式子尽量不要写了吧还是...
        }
    }
    for(int i=0;i<len;i++){
        putchar(str[i]);
    }

}

大家如果有疑问欢迎在评论下方留言,一起讨论吧!

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值