问下c++大佬们这道题我答案是对的为什么未通过?

问下大佬们信息学奥赛一本通c++版的一道基础题,我的代码答案对的啊为什么不通过6世纪法国外交家BlaisedeVigenère设计了一种多表密码加密算法——Vigenèr... 问下大佬们信息学奥赛一本通c++版的一道基础题,我的代码答案对的啊为什么不通过6世纪法国外交家Blaise de Vigenère设计了一种多表密码加密算法——Vigenère密码。Vigenère密码的加密解密算法简单易用,且破译难度比较高,曾在美国南北战争中为南军所广泛使用。 在密码学中,我们称需要加密的信息为明文,用M表示;称加密后的信息为密文,用C表示;而密钥是一种参数,是将明文转换为密文或将密文转换为明文的算法中输入的数据,记为k。 在Vigenère密码中,密钥k是一个字母串,k=k1k2…kn。当明文M=m1m2…mn时,得到的密文C=c1c2…cn,其中ci=mi®ki,运算®的规则如图片所示。Vigenère加密在操作时需要注意:1.®运算忽略参与运算的字母的大小写,并保持字母在明文M中的大小写形式;2.当明文M的长度大于密钥k的长度时,将密钥k重复使用。例如,明文M=Helloworld,密钥k=abc时,密文C=Hfnlpyosnd。【输出】输出共1行,一个字符串,表示输入密钥和密文所对应的明文。【输入样例】CompleteVictoryYvqgpxaimmklongnzfwpvxmniytm【输出样例】Wherethereisawillthereisaway#include<iostream>#include<cstring>#include<stdio.h> using namespace std;int main(){ char min[26][26];//创建一张小写字母表 char l='a'; for(int i=0;i<26;i++) { for(int o=0;o<26;o++) { min[i][o]=l; l++; if(l=='{') { l='a'; } } l++; } char M[1000]; char k[100]; char result[1000]; cin>>k; cin>>M; int j=0; for(int pt=0;pt<strlen(k);pt++)//将密钥大写转小写 { if(k[pt]<90) k[pt]+=32; } int stt=strlen(k); if(strlen(M)>strlen(k))//若密钥小于明文,重复使用 { for(int js2=strlen(k);js2<strlen(M);js2++) { k[js2]=k[j]; if(j==stt) { j=0; } j++; } } for(int js1=0;js1<strlen(M);js1++)//将密钥的值作为表的纵标,在此行中寻找密文值的横标 { if(M[js1]>90)//如果是小写,则将其ascll-97换算成数组下标查找 { for(int se=0;se<26;se++) { if(min[se][(k[js1]-97)]==min[0][(M[js1]-97)]) { result[js1]=min[0][se];//将其横标对应的值传给result数组 } } } else//如果是大写,则将其ascll+32后的值(换算成小写)-97换算成数组的下标查找 { for(int se=0;se<26;se++) { if(min[se][(k[js1]-97)]==min[0][(M[js1]-97+32)]) { result[js1]=min[0][se]-32;//最后在赋值时+32换算成大写 } } } } for(int ll=0;ll<strlen(M);ll++) { cout<<result[ll];//输出result数组的值 } return 0;} 展开
 我来答
参观西湖
2021-01-10 · 古籍有很多,写出来一起欣赏。
参观西湖
采纳数:919 获赞数:2308

向TA提问 私信TA
展开全部
未通过说明不对。
判断答案对不对是这样的:
准备足够充分的测试例,包括正确的和错误的输入,然后运行你的代码,都能得到期望的输出,才能说明你的代码基本合格。
只要一组测试数据不通过 ,你的代码就是不合格的。
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式