CodeRookie


私信TA

用户名:Shmily124

访问量:133446

签 名:

清风前烹茶对弈,明月下把酒言欢

等  级
排  名 14
经  验 22966
参赛次数 7
文章发表 39
年  龄 0
在职情况 学生
学  校 ZUA
专  业 计科

  自我简介:

悄悄地秃头,然后惊艳所有人?

解题思路:


首先我们需要判断输入的哪一行是我们需要的字符串

通过题目我们知道,每输入三行中的第二行是我们想要的

那么我们可以定义一个变量 n 来记录输入的次数,当n对3取余等于2即 n % 3 == 2 ,  此时所输入的就是我们需要的字符串

接下来只需要对大写字母进行处理即可

有一个简便的处理方法就是:

s[i] = 'Z' - ('Z' - (s[i] - 5)) % 26;

将字符减去5后与 'Z' 求差,再对26取余,此时得到的是字符与 'Z' 的距离,再次与 'Z' 求差即可

此前我们做过一道类似的题目,详情请看这篇文章:[编程入门]密码破译-题解(C语言代码)


参考代码:

#include <stdio.h>
#include <string.h>
int main()
{
    char s[201];            //定义一个长度200的字符数组
    int n = 1;              //定义计数变量n,初始化为1
    do
    {
        gets(s);            //输入字符串
        if (n % 3 == 2)     //判断第n次输入是否为三行中的第二行
        {
            for (int i = 0; s[i] != '\0'; i++)
            {
                if (s[i] >= 'A' && s[i] <= 'Z')                 //判断字符是否为大写字母
                {
                    s[i] = 'Z' - ('Z' - (s[i] - 5)) % 26;       //对大写字母进行处理
                }
            }
            puts(s);        //输出字符串
        }
    } while (strcmp(s, "ENDOFINPUT") != 0 && n++);              //判断输入是否结束并使n自加
    return 0;
}


 

0.0分

7 人评分

  评论区

2022-12-30 12:22:35
  • «
  • 1
  • »