news 2026/5/10 17:12:17

错题本:恺撒加密

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
错题本:恺撒加密

我写的代码:

#define _CRT_SECURE_NO_WARNINGS 1 #include<stdio.h> #include<string.h> #define n 10000 void kasa(char* a, const char* b,const char* c); void encryption(char* a); int main() { char str1[n]; char str2[n]; char str3[n]; scanf("%9999s", str1); //限制字符串长度,给'\0'预留一个位置 scanf("%9999s", str2); int i = 0; while (str1[i]) { str3[i] = str1[i]; i++; } str3[i] = '\0'; kasa(str1, str2,str3); } void kasa(char* a, const char* b,const char* c) { int i = 0; int count = 0; while (a[i] != '\0'&&b[i]!='\0') //两个都要判断防止数组访问越界 { if (strlen(a) != strlen(b)) //如果长度不一样的话也是加密不到的!!! { printf("IMPOSSIBLE"); return; } if ((a[i] >= 'a' && a[i] <= 'z' && b[i] >= '0' && b[i] <= '9') || (b[i] >= 'a' && b[i] <= 'z' && a[i] >= '0' && a[i] <= '9')) { printf("IMPOSSIBLE"); return; } i++; } i = 0; while (1) { if (count >= 1) { if (strcmp(a, c) == 0) { printf("IMPOSSIBLE"); return; } } if (a[i] != b[i]) { encryption(a); count++; i = 0; //这里 i 的值需要重置,加密之后所有的字符要从 i=0 开始判断 continue; } if (a[i] == '\0') { printf("%d", count); return; } i++; } } void encryption(char* a) { while (*a) { if (*a == 'z') { *a = 'a'; } else if (*a == '9') { *a = '0'; } else { *a = *a + 1; } a++; } }

缺点:(1)容易造成数组越界

(2)时间复杂度太高

(3)代码过于复杂

解题思路:

(1)先用scanf输入两组数组的数据

(2)用str3记录str1的数组方便后续用于能否加密成功做判断(当str1加密很多次之后如果又变回和原来一样了就是”IMPOSSIBLE“)

(3)进入函数kasa首先就是判断长度是否一样,如果不一样的话一定是加密不成功的进入循环要同时判断两个数组是否遇到了 ’\0‘ 不然容易数组访问越界

这里第一个循环就有问题,第一个判断长度的 if 语句要放在循环外面

(4)判断每个位置对应的字符类型是否相同(这里用的方法太过复杂其实可以直接用isdigit,isalpha)函数来判断

(5)直接用一个死循环,因为我原先不知道至多循环多少次可以加密成功

(6)进入循环给count(加密次数)计数如果大于1了话每次都要进来判断是否加密回原来那样子了

(7)判断对应元素是否相等不相等的话进入encryption函数加密,每次加密完要记得把 i 重置成0,因为后面的判断还是要从一开始判断

(8)如果上面的都通过了说明就是加密成功了,直接打印加密次数

PS:彩色的字体都是把代码丢给AI它帮我改进的;黑色加粗和块引用是之后自己发现的错误


AI写的代码:

#define _CRT_SECURE_NO_WARNINGS 1 #include<stdio.h> #include<string.h> #include<ctype.h> int main() { char str1[1000]; char str2[1000]; scanf("%s", str1); scanf("%s", str2); size_t s1_len = strlen(str1); size_t s2_len = strlen(str2); if (s1_len != s2_len) { printf("IMPOSSIBLE"); return 0; } for (int i = 0; i < s1_len; i++) { if (isdigit(str1[i]) != isdigit(str2[i]) || isalpha(str1[i]) != isalpha(str2[i])) { printf("IMPOSSIBLE"); return 0; } } int k; if (isdigit(str1[0])) { int str1n = str1[0] - '0'; int str2n = str2[0] - '0'; k = (str2n - str1n + 10) % 10; } else { int str1n = str1[0] - 'a'; int str2n = str2[0] - 'a'; k = (str2n - str1n + 26) % 26; } for (int i = 1; i < s1_len; i++) { if (isdigit(str1[i])) { int str1n = str1[i] - '0'; int str2n = str2[i] - '0'; if ((k + str1n) % 10 != str2n) { printf("IMPOSSIBLE"); return 0; } } else { int str1n = str1[i] - 'a'; int str2n = str2[i] - 'a'; if ((k + str1n) % 26 != str2n) { printf("IMPOSSIBLE"); return 0; } } } printf("%d\n", k); return 0; }

解题思路:

判断完长度和字符类型后,将字符转为整型数字然后看第一个字符需要移动多少次能和对应的数组匹配上,之后用循环判断数组的每个元素,如果和第一个元素加密的次数不一样就直接结束输出”IMPOSSIBLE“

这里积累一下这种思路:将字符转换成数字的方法然后直接用数字的加减求余来算出需要加密的次数

如果都通过了就可以直接输出k就是加密的次数了

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/5/10 19:10:28

一文说清JLink仿真器如何配合工业Linux系统开发

从零打通JLink调试链&#xff1a;工业Linux系统开发的硬核实战指南你有没有遇到过这样的场景&#xff1f;一块工业级嵌入式板子上电后串口“一声不吭”&#xff0c;U-Boot没反应&#xff0c;内核也不启动。你反复检查电源、时钟、DDR初始化参数&#xff0c;甚至换了几片Flash芯…

作者头像 李华
网站建设 2026/4/25 10:14:12

Dify如何支持断网环境下的基础功能?

Dify如何支持断网环境下的基础功能&#xff1f; 在金融、军工、医疗等对数据安全极度敏感的行业中&#xff0c;系统的运行往往被严格限制在封闭内网中——无外网访问、无云服务调用、甚至物理隔离。这种环境下&#xff0c;传统的AI应用开发模式几乎寸步难行&#xff1a;依赖Ope…

作者头像 李华
网站建设 2026/5/3 10:39:10

Dify平台的隐私保护机制符合GDPR吗?

Dify平台的隐私保护机制符合GDPR吗&#xff1f; 在企业加速拥抱AI的今天&#xff0c;一个现实问题摆在面前&#xff1a;如何在快速构建智能应用的同时&#xff0c;不踩中隐私合规的“雷区”&#xff1f;尤其是当你的用户来自欧洲——哪怕只是官网支持英文访问——GDPR&#xff…

作者头像 李华
网站建设 2026/5/3 2:41:12

理想二极管反向截止特性分析:系统学习基础原理

理想二极管反向截止特性深度解析&#xff1a;从原理到实战的完整指南在电源管理设计中&#xff0c;有一个看似简单却极易被低估的关键环节——防止电流倒流。你是否曾遇到过这样的问题&#xff1a;系统断电后&#xff0c;电池反而给主电源“充电”&#xff1f;热插拔模块时出现…

作者头像 李华
网站建设 2026/5/8 18:24:19

【信创】算法开发适配

一、总体对比 海光路径&#xff08;常见形态&#xff09;&#xff1a;海光是国产 x86 生态&#xff08;兼容 x86 指令集&#xff09;&#xff0c;常见做法是在海光服务器上搭配 NVIDIA GPU 或国产加速卡&#xff08;近年来有“类 CUDA / DCU”兼容层的进展&#xff09;。在这种…

作者头像 李华
网站建设 2026/5/10 21:51:50

Dify在旅游路线智能推荐中的应用探索

Dify在旅游路线智能推荐中的应用探索 在旅游业日益个性化的今天&#xff0c;用户早已不再满足于“千篇一律”的标准行程。他们想要的是&#xff1a;一次真正懂自己的旅行——既能避开人潮高峰&#xff0c;又能精准匹配兴趣&#xff1b;既考虑预算限制&#xff0c;又兼顾家庭成员…

作者头像 李华