鱼C论坛

 找回密码
 立即注册
查看: 1907|回复: 2

ball ball you

[复制链接]
发表于 2021-1-7 09:56:18 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能^_^

您需要 登录 才可以下载或查看,没有账号?立即注册

x
字母环形加密(增强) (10分)
将26个英文字母按顺时针方向排成一个圆环。密钥是一个整数。



具体加密方法如下:

若密钥 key≥0,则从明文字母开始按顺时针方向走 ∣key∣ 步得到密文字母;
若密钥 key<0,则从明文字母开始按逆时针方向走 ∣key∣ 步得到密文字母。
请编写函数,完成加密功能。

函数原型
char Encode(char plain, int key);
说明:参数 plain 为明文字符,key 为密钥(即步数)。若明文字符是字母,则函数值为对应的密文字母,大小写不变。若明文字符不是字母,则函数值不变。

裁判程序
#include <stdio.h>
#include <ctype.h>

char Encode(char plain, int key);

int main()
{
    char x, y;
    int k;
    scanf("%c%d", &x, &k);
    y = Encode(x, k);
    printf("%c\n", y);
    return 0;
}

/* 你提交的代码将被嵌在这里 */
输入格式
明文 密钥(任意整数)

输出格式
密文

输入样例1
x 5
输出样例1
c
输入样例2
B -3
输出样例2
Y
输入样例3
# 7
输出样例3
#


//以下是我的代码
char Encode(char plain, int key)
{
        int i;
        if(isalpha(plain)&&key>0)return plain+key;
        else if(isalpha(plain)&&key<0)return plain-key;
        else return plain;
}//无法输出
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2021-1-7 10:39:02 | 显示全部楼层
本帖最后由 jackz007 于 2021-1-7 12:13 编辑
char Encode(char plain , int key)
{
        int k = key                                                                            ;
        char c = plain                                                                         ;
        if(key < 0) k = - k                                                                    ;
        k = k % 26                                                                             ;
        if(k && (c >= 'A' && c <= 'Z' || c >= 'a' && c <= 'z')) {
                if(key < 0) k = - k                                                            ;
                c += k                                                                         ;
                if(k < 0 && (c > 'A' - 26 && c < 'A' || c > 'a' - 26 && c < 'a')) c += 26      ;
                else if(k > 0 && (c > 'Z' && c < 'Z' + 26 || c > 'z' && c < 'z' + 26)) c -= 26 ;
        }
        return c                                                                               ;
}
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2021-1-7 11:55:16 | 显示全部楼层
char Encode(char plain, int key)
{
        char letter;
        letter = plain + key;
        if (plain >= 'A' && plain <= 'Z')        // 若输入的是大写字母
        {
                if (letter > 'Z')                    // 如果输入加上密钥大于字母Z
                        letter = letter - 'Z' + 'A' - 1; // 则让密文落入前面的大写字母
                else if (letter < 'A')               // 如果输入加上密钥小于字母A
                        letter = letter - 'A' + 'Z' + 1; // 则让密文落入后面的大写字母
        }
        else if(plain >= 'a' && plain <= 'z')    // 若输入的是小写字母
        {
                if (letter > 'z')                    // 如果输入加上密钥大于字母z
                        letter = letter - 'z' + 'a' - 1; // 则让密文落入前面的小写字母
                else if (letter < 'a')               // 如果输入加上密钥小于字母a
                        letter = letter - 'a' + 'z' + 1; // 则让密文落入后面的小写字母
        }
        else                                     // 若输入的不是英文字母
                letter = plain;                      // 则原文输出
        return letter;
}
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2025-1-10 11:08

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表