qq_45687091 2020-04-11 20:26 采纳率: 0%
浏览 243

如何优化无规律 数组的数据间交换

数据没有规律交换,还原的时候出来像我这样一个一个还原,有没有简化的写法
就是这道oj题

描述
古罗马帝国有一个拥有各种部门的强大政府组织。其中一个部门就是保密服务部门。为了保险起见,在省与省之间传递的重要文件中的大写字母是加密的。当时最流行的加密方法是替换和重新排列。

替换方法是将所有出现的字符替换成其它的字符。有些字符会替换成它自己。例如:替换规则可以是将'A' 到 'Y'替换成它的下一个字符,将'Z'替换成 'A',如果原词是 "VICTORIOUS" 则它变成 "WJDUPSJPVT"。

排列方法改变原来单词中字母的顺序。例如:将顺序例如将顺序 < 2 1 5 4 3 7 6 10 9 8 > 应用到 "VICTORIOUS" 上,则得到"IVOTCIRSUO"。

人们很快意识到单独应用替换方法或排列方法加密,都是很不保险的。但是如果结合这两种方法,在当时就可以得到非常可靠的加密方法。所以,很多重要信息先使用替换方法加密,再将加密的结果用排列的方法加密。用两种方法结合就可以将"VICTORIOUS" 加密成"JWPUDJSTVP"。

考古学家最近在一个石台上发现了一些信息。初看起来它们毫无意义,所以有人设想它们可能是用替换和排列的方法被加密了。人们试着解读了石台上的密码,现在他们想检查解读的是否正确。他们需要一个计算机程序来验证,你的任务就是写这个验证程序。

#include <stdio.h>

int main() {
char num[10],a,b,c,d;//a用来交换顺序
char Daan[10]={'V','I','C','T','O','R','I','O','U','S'};
for(int i=0;i<10;i++){
scanf("%c",&num[i]);
}
for(int i=0;i<10;i++){
if ('A'<=num[i]<='Z')//大写且不是Z的情况
num[i]=num[i]-1;
if(num[i]=='A')
num[i]=num[i]+23;
}
a=num[0];
num[0]=num[1];
num[1]=a;
b=num[2];
num[2]=num[4];
num[4]=b;
c=num[5];
num[5]=num[6];
num[6]=c;
d=num[7];
num[7]=num[9];
num[9]=d;

for(int i=0;i<10;i++){printf("%c",num[i]);}
}

粗糙代码如上,求大神给修改下!
  • 写回答

1条回答 默认 最新

  • threenewbee 2020-04-11 23:34
    关注
    别的就不看了
    if ('A'<=num[i]<='Z')//大写且不是Z的情况
    这明显不对
    应该是
    if ('A'<=num[i]&& num[i]<='Z')//大写且不是Z的情况
    
    评论

报告相同问题?

悬赏问题

  • ¥15 Pwm双极模式H桥驱动控制电机
  • ¥30 这是哪个作者做的宝宝起名网站
  • ¥60 版本过低apk如何修改可以兼容新的安卓系统
  • ¥25 由IPR导致的DRIVER_POWER_STATE_FAILURE蓝屏
  • ¥50 有数据,怎么建立模型求影响全要素生产率的因素
  • ¥50 有数据,怎么用matlab求全要素生产率
  • ¥15 TI的insta-spin例程
  • ¥15 完成下列问题完成下列问题
  • ¥15 C#算法问题, 不知道怎么处理这个数据的转换
  • ¥15 YoloV5 第三方库的版本对照问题