• 有一行电文,以按下面规律译成密码: A--->Z a--->z B--->Y b--->Y C--->X c--->x …… 即第1个字母编程第26个字母,第i个字母编程第(26-i+1)个字母,非字母字符不变,要求编程序将密码译回原文,并输出密码和原文。


    有一行电文,以按下面规律译成密码:

    A--->Z   a--->z
    B--->Y   b--->Y
    C--->X   c--->x
    ……
    

    即第1个字母编程第26个字母,第i个字母编程第(26-i+1)个字母,非字母字符不变,要求编程序将密码译回原文,并输出密码和原文。

    【答案解析】

    从题目给的实例中可以看到,编码规则非常简单,就是将从前往后数的第i个字母转化为从后往前数的第i个字母。

    那解压时直接反过来转换即可:

    即'Z'--->'A' 'z'--->'a'

    ​ 'Y'--->'B' 'y'--->'b'

    ​ 'X'--->'C' 'x'--->'c'

    假设如果当前拿到的是小写字母,转换方式如下:

    1. 先用s[i] - 'a'计算出s[i]是26个字母中从前往后数的第几个
    2. 再用26 - (s[i]- 'a') - 1 转换为26个字母中从后往前数的第几个
    3. 在2的结果上加上'a',即转换为对应从后往前的第几个字母

    大写字母转换方式与上述相同,将上述每条中的'a'换为‘A’即可。

    【代码实现】

    #include<stdio.h>
    int main()
    {
    	char s[1024] = {0};
    	scanf("%s", s);
    
    	int len = strlen(s);
    	// 转换
    	for (int i = 0; i < len; ++i)
    	{
    		// 如果是小写字母(大写字母出来类似):
    		// 1. 先用s[i] - 'a'计算出s[i]是26个字母中从前往后数的第几个
    		// 2. 再用26 - (s[i]- 'a') - 1 转换为26个字母中从后往前数的第几个
    		// 3. 在2的结果上加上'a',即转换为对应从后往前的第几个字母
    		if (s[i] >= 'a' && s[i] <= 'z')
    			s[i] = 'a' + 26 - (s[i]-'a')-1;
    		else if (s[i] >= 'A' && s[i] <= 'Z')
    			s[i] = 'A' + 26 - (s[i] - 'A')-1;
    	}
    
    	printf("%s", s);
    	return 0;
    }
    

    【结果截屏】

  • 相关阅读:
    iOS UITableViewCell中包含UICollectionView嵌套 解决UITableViewCell显示异常
    mac 终端创建podfile文件
    iOS UIScrollView弹性问题
    NSMutableParagraphStyle与NSParagraphStyle的使用
    iOS 单个控制器隐藏 导航栏下划线
    iOS UICollectionView reloadData后立即获取contentSize.height高度
    高德地图API开发二三事(一)如何判断点是否在折线上及引申思考
    Python-6
    Python-模块
    python-递归函数和内置函数笔记汇总
  • 原文地址:https://www.cnblogs.com/weiyidedaan/p/13666896.html
Copyright © 2020-2023  润新知