恺撒加密术WA求救!!!

此为题面

BJ. 恺撒加密术

Problem ID: 8238

Contest ID: 5697

必做题

Wrong Answer

时间限制:0.2内存限制:32M

专题说明:

在古罗马,“高卢战争”描述了凯撒使用加密来传递信息,即所谓的“凯撒加密”,这是一种替代加密。消息中的每个字母都被其后面的第t个字母替换。例如,当t=4时,加密规则是用原始字母后的第4个字母替换原始字母, 字母“A”后的第四个字母是“E”,而“A”被“E”取代,字母“z”后的第四个字母是“d”,而“z”被“d”取代。因此,“China”将被翻译成“Glmre”。请编写一个程序来加密输入的字符串,方法是将每个字母替换为后面的第t个字母。

输入格式:输入一个字符串并输入t

输出格式:标题中描述了输出格式。

示例输入1:

china 4

样本输出1:

glmre

示例输入2:

antDZYO 30

样本输出2:

erxHDCS

规定:

输入的字符串长度不超过100,只包含小写字母和大写字母。t<=260

此为代码

#include<bits/stdc++.h>
using namespace std;

int main(){
    int t,n;
    char a[101];
    for(int i=1;i<=n;i++){
        cin>>a[i];
    }
    cin>>t;
    for(int j=1;j<=n;j++){
        int a=(int)j+4;
        cout<<(char)a;
    }
    return 0;
}
1 个赞

你这得加一个特判

1 个赞
#include<bits/stdc++.h>
using namespace std;
int k;
string n;
int main(){
    cin>>n>>k;
    for(int i=0;i<n.size();i++){
        if(n[i]>='a'&&n[i]<='z'){
            if('z'-n[i]<k%26){
                cout<<char(n[i]+k%26-26);
            }else{
                cout<<char(n[i]+k%26);
            }
        }else if(n[i]>='A'&&n[i]<='Z'){
            if('Z'-n[i]<k%26){
                cout<<char(n[i]+k%26-26);
            }else{
                cout<<char(n[i]+k%26);
            }
        }
    }
    return 0;
}

有用的话,给个解决方案呗

1 个赞

如果a > 26,a就模以26

1 个赞

额不能直接发代码
要有思路

那不只是后4位,是后t位,你题目看错了

1 个赞

然后还得注意大小写

1 个赞

t有可能大于26,所以要取余

1 个赞

那是后t位,并不是后4位,那只是个例子
还有,你的int可能会超出字母范围,要模以26

1 个赞

知道了,已补上

1 个赞
#include<bits/stdc++.h>
using namespace std;
int t;
string n;//利用字符串,更加直观简洁
int main(){
    cin>>n>>t;//输入
    for(int i=0;i<n.size();i++){
        if(n[i]>='a'&&n[i]<='z'){//判断大小写
            cout << (char)((n[i] - 'a' + t) % 26 + 'a');//将char类型转为int类型进行计算后再转回char来输出
        }else{
            cout << (char)((n[i] - 'A' + t) % 26 + 'A');//同上
        }
    }
    return 0;
}

这个是极简版,给个解决方案呗~~~

1 个赞

好对了蟹蟹

1 个赞

你的程序问题太大了,

首先,你的N并没有输入,然而在两个for循环中,却出现了n,也就是说,你的a数组根本没输入

其次,第11行 你的j只是一个普通的int类型,而并非是一个指针,所以,你的j并非是字符,而只是一个循环变量

而且,你的a数组与普通变量a重名了,虽然由于作用域的原因,IDE不会报错,但是这还是一个十分致命低级的错误

在求助前,你也需要经过自己的思考,实在想不出时才求救!!:pray::pray: :pray::pray:

1 个赞

#include<bits/stdc++.h>
using namespace std;
char a[101];
int main(){
int t;
cin>>a;
cin>>t;
for(int i=0;i<101;i++){
if(a[i]>96&&a[i]<123){
for (int j=1;j<=t;j++){
if((int)(a[i])==122){
a[i]=‘a’-1;
}
if((int)a[i]!=0){
(int)a[i]++;
}
}
}else{
for (int j=1;j<=t;j++){
if((int)(a[i])==90){
a[i]=‘A’-1;
}
if((int)a[i]!=0){
(int)a[i]++;
}
}

	}
}
cout<<a;
return 0;

}

AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA

1 个赞