一本通C++1137:加密的病例单(我为什么提交是错的?)

【题目描述】
小英是药学专业大三的学生,暑假期间获得了去医院药房实习的机会。

在药房实习期间,小英扎实的专业基础获得了医生的一致好评,得知小英在计算概论中取得过好成绩后,主任又额外交给她一项任务,解密抗战时期被加密过的一些伤员的名单。

经过研究,小英发现了如下加密规律(括号中是一个“原文 -> 密文”的例子)

1.原文中所有的字符都在字母表中被循环左移了三个位置(dec -> abz)

2.逆序存储(abcd -> dcba )

3.大小写反转(abXY -> ABxy)

【输入】
一个加密的字符串。(长度小于50且只包含大小写字母)

【输出】
输出解密后的字符串。

【输入样例】
GSOOWFASOq
【输出样例】
Trvdizrrvj

// ybt.ssoier.cn 1137
#include<bits/stdc++.h>
using namespace std;

int main(){
    char s[51];
    cin>>s;
    int len=strlen(s);
    for(int i=0;i<=len-1;i++){
        if(s[i]>='x'&&s[i]<='z' || s[i]>='X'&&s[i]<='Z') s[i]-=23;
        else s[i]+=3;
        for(int j=0;j<=len/2-1;j++){
            s[j]=s[len-1-j];
        }
        if(s[i]>='A' && s[i]<='Z') s[i]+=32;
        else s[i]-=32;
    }
    cout<<s;
    return 0;
}

img


麻烦看到的网友帮我解答一下,谢谢!

  • 你可以参考下这个问题的回答, 看看是否对你有帮助, 链接: https://ask.csdn.net/questions/937247
  • 除此之外, 这篇博客: 【数据结构与算法】- 排序(算法)中的 十:有一种简单的排序算法,称为计数排序,这种排序算法对一个待排序的表(用数组表示)进行排序,并将排序结果存放到另一个新的表中,必须注意的是,表中所有待排序的关键码互不相同,计数排序算法针对表中的每个记录,扫描待排序的表一趟,统计表中有多少个记录的关键码比该记录的关键码小,假设针对某个记录统计出的计数值为c,则这个记录在新有序表中的合适存放位置为c 部分也许能够解决你的问题, 你可以仔细阅读以下内容或跳转源博客中阅读:
  • #include<iostream>
    using namespace std;
    
    void countsort(int a[],int b[],int n)
    {
    	//遍历每一趟
    	int count=0;
    	for(int i=0;i<n;i++)
    	{
    		//找到每个元素小的个数
    		count = 0;
    		for(int j=0;j<n;j++)
    		{
    			if(a[j]<a[i]) count++;
    		}
    		b[count] = a[i];
    	}
    }
    int main()
    {
    	int a[6]={3,5,7,2,4,9},b[6];
    	countsort(a,b,6);
    	for(int i=0;i<6;i++) cout<<b[i]<<" ";
    	return 0;
    }

else s[i]+=3;
为啥不是x到z之间的字符就变成右移三位了呢?
if(s[i] >='A' && s[i] <='Z')
s[i] = (s[i] - 'A' - 3 + 26)%26 + 'A';
else
s[i] = (s[i] - 'a' - 3 + 26)%26 + 'a';
///////////////////////
for(int j=0;j<=len/2-1;j++){
s[j]=s[len-1-j];
}
这逆序写的也不对啊,根本没有交换啊
for(int j=0;j<=len/2-1;j++){
char c = s[j];
s[j]=s[len-1-j];
s[len-i-j] = c;
}